您的位置:首页 > 其它

线程类型和同步方法

2008-06-02 14:15 197 查看
摘自:http://www.eepw.com.cn/article/81506.htm
1 各种线程类型和同步方法  
1.1 线程类型  
Visual C++中线程分为工作者线程(Worker Thread)和用户界面线程(User Interface Thread)两大类。  用户界面线程的特点是拥有单独的消息队列,可以具有自己的窗口界面,能够对事件和用户输入做出响应,具体实现时由CwinThread派生出一个类。但其缺点是当需要停止或撤销当前正在运行的线程而向其发送中止消息后,只有在消息队列中排在前面的消息被一一处理完之后,线程才能接受中止消息并停止当前工作,这对CPU是一种浪费,在对实时性要求较高的工控程序中是不可容忍的。  工作者线程选用于处理后台任务,而不影响用户对应用程序的使用。工作者线程仅仅由一个函数体实现,其实现简单,便 于编程者控制,与事件同步方法相配合能对中止消息做出较快反应。  
1.2 同步方法  
在多线程应用程序中,两个或更多的线程同时访问相同数据会导致不可预知的结果,因此保持线程间的同步是一个不可或缺的环节。Visual C++提供了四种同步方法:临界区(Critial Section)、信号灯(Semaphore)、互斥量(Mutex)和事件(Event)。  其中采用临界区、信号灯或互斥量进行同步时,线程间的同步过程由操作系统完全控制,系统仅仅防止多个线程对同一资源的同时使用,而相同优先级的线程对同一资源的使用顺序是编程者无法控制的。而在一般工控系统中,当主控台下方设备数据变化时,应能及时中止当前的计算(如果当前计算未完成的话)并根据新的数据开始新一轮的计算,因而需求各线程对所处理的数据有一定的操作次序。  事件同步是通过钭事件自身设置为有信号或无信号来通知其它线程某一操作已完成或尚款完成,其设置可由编程人员手工完成,适合于工控程序应用。尽管事件同步方式平均效率比上面三种方式稍低,但在工控程序应用中相对于因数据未能及时更新而导致大量的无用计算及其对实时性的损害来讲,这是非常值得的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: