保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

QNX环境下多线程编程


sp;  读/写锁——POSIX 1003.1j提议的内容,主要由一个互斥体和两个条件变量构造,两个条件变量分别控制读写操作。读/写锁允许多个线程同时读数据,但是禁止任何线程修改正在被其他线程读或修改的数据,也可以让一个线程独占写访问,但此时任何读访问的线程都不能继续,直到读/写锁被释放,所以读/写锁被用来保护经常需要读但是通常不需要修改的信息。

    Sleepon锁——QNX6所独有的一种同步机制,由一个互斥体和一些数据构造而成,与条件变量相似但是用法比较简单。它与条件变量的不同在于当有N个线程阻塞在M个对象的时候,如果用条件变量来同步时需要用到M个条件变量,而sleepon锁为每个线程自动分配条件变量,只需要N个条件变量,使用合适可以节约系统资源。

    3 多线程程序的设计分析与基本结构

    3.1多线程程序的设计分析
    1)确定完成任务所需的最少线程个数。

    多余的线程只会使程序的复杂性增加,出错的可能性也随之增加。设计程序时要遵循简单、高效、安全的原则,如果用单线程能够很好的完成任务,那么一定不要用多线程。

    2)分析多线程需要共享的数据。

    在多线程程序中常常需要共享一些数据,通常是一些全局变量,如果数据量很大可能需要开辟共享内存区。

    3) 根据共享数据的特点选择需要的保护机制。

    多个线程需要写操作的变量可以用互斥体保护,经常需要读操作而很少进行写操作的可以用读/写锁保护等。

    4) 分析工作线程需要访问资源。

    工作线程可能需要访问硬件,等待硬件响应、可能需要访问某一数据库、也可能不访问任何资源只是进行一些计算等等。这时需要考虑相应的同步机制,可以用条件变量结合互斥体,也可以用更为简单的sleepon锁。

    5)进行线程的清理工作。

    线程完成工作后可能会自动退出,也可能会阻塞在某处,甚至工作线程还没完成工作的时候主线程已经退出,造成整个进程的结束,使程序失败。有多种方法可以完成线程的清理工作,可以让主线程调用pthread_join()函数清理工作线程,可以用屏障同步机制清理,也可以用条件变量来完成清理工作。

    3.2多线程程序的基本结构

    多线程编程的结构有很多种,但基本的编程结构总结起来有三种:流水线结构、工作组结构、客户端/服务器结构。这三种结构可以以任意方式组合,来满足实际工程的需求。

    1) 流水线结构

    在流水线结构中,需要处理的“数据”串行地被一组线程顺序处理,每个线程依次在每个数据元素上执行一个特定的操作,完成操作后将结果传递给流水线中的下一个线程。如图1所示。


    2) 工作组结构

    在工作组结构中,数据有一组线程分别独立地处理,每个线程处理不同的部分。由于所有的工作线程在不同的数据部分上执行相同的操作,这种模式通常被称为SIMD(单指令多数据流)并行处理。但是工作组中的线程可以不使用SIMD模型,他们可以在不同的数据上执行不同的操作。工作组结构是多线程程序应用较多的一种结构。如图2所示

图2 工作组结构


    3) 客户端/服务器结构

    在客户/服务器结构中,客户请求服务器对一组数据执行某个操作。客户端独立地执行操作,而客户端或者等待服务器执行的结果,或者并行执行另外的任务,在后面需要时在查找结果。这种结构又是一种对某些公共资源同步管理的简单方式。如图3

《QNX环境下多线程编程(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/140449.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。