线程类型和同步方法
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)。 其中采用临界区、信号灯或互斥量进行同步时,线程间的同步过程由操作系统完全控制,系统仅仅防止多个线程对同一资源的同时使用,而相同优先级的线程对同一资源的使用顺序是编程者无法控制的。而在一般工控系统中,当主控台下方设备数据变化时,应能及时中止当前的计算(如果当前计算未完成的话)并根据新的数据开始新一轮的计算,因而需求各线程对所处理的数据有一定的操作次序。 事件同步是通过钭事件自身设置为有信号或无信号来通知其它线程某一操作已完成或尚款完成,其设置可由编程人员手工完成,适合于工控程序应用。尽管事件同步方式平均效率比上面三种方式稍低,但在工控程序应用中相对于因数据未能及时更新而导致大量的无用计算及其对实时性的损害来讲,这是非常值得的。
1 各种线程类型和同步方法
1.1 线程类型
Visual C++中线程分为工作者线程(Worker Thread)和用户界面线程(User Interface Thread)两大类。 用户界面线程的特点是拥有单独的消息队列,可以具有自己的窗口界面,能够对事件和用户输入做出响应,具体实现时由CwinThread派生出一个类。但其缺点是当需要停止或撤销当前正在运行的线程而向其发送中止消息后,只有在消息队列中排在前面的消息被一一处理完之后,线程才能接受中止消息并停止当前工作,这对CPU是一种浪费,在对实时性要求较高的工控程序中是不可容忍的。 工作者线程选用于处理后台任务,而不影响用户对应用程序的使用。工作者线程仅仅由一个函数体实现,其实现简单,便 于编程者控制,与事件同步方法相配合能对中止消息做出较快反应。
1.2 同步方法
在多线程应用程序中,两个或更多的线程同时访问相同数据会导致不可预知的结果,因此保持线程间的同步是一个不可或缺的环节。Visual C++提供了四种同步方法:临界区(Critial Section)、信号灯(Semaphore)、互斥量(Mutex)和事件(Event)。 其中采用临界区、信号灯或互斥量进行同步时,线程间的同步过程由操作系统完全控制,系统仅仅防止多个线程对同一资源的同时使用,而相同优先级的线程对同一资源的使用顺序是编程者无法控制的。而在一般工控系统中,当主控台下方设备数据变化时,应能及时中止当前的计算(如果当前计算未完成的话)并根据新的数据开始新一轮的计算,因而需求各线程对所处理的数据有一定的操作次序。 事件同步是通过钭事件自身设置为有信号或无信号来通知其它线程某一操作已完成或尚款完成,其设置可由编程人员手工完成,适合于工控程序应用。尽管事件同步方式平均效率比上面三种方式稍低,但在工控程序应用中相对于因数据未能及时更新而导致大量的无用计算及其对实时性的损害来讲,这是非常值得的。
相关文章推荐
- 线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步
- Java多线程-线程的同步(同步方法)
- 线程的同步-同步方法
- 线程的同步-同步方法
- Java线程:线程的同步-同步方法
- Java线程:线程的同步-同步方法
- [置顶] 判断用户的请求类型 get or post 然后同步 或者 异步 执行 方法
- Java线程:线程的同步-同步方法
- Form程序中,在线程里,回调方法,实现同步。
- 单核单处理器的环境下对多线程进行同步的常用方法
- java 总结几种线程异步转同步的方法
- java线程学习5——线程同步之同步方法
- java-线程等待/同步的五种方法
- QT的元类型和QT线程通信的方法
- 同时创建多个线程,它们都访问一个对象中的同步方法,怎么确保第一个线程最先拿到对象锁,否则,怎么保证多个线程之间的有序通信
- java线程同步的方法总结
- Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
- [Java]Java多线程数据安全(同步线程的方法)
- VCL线程的同步方法 Synchronize(用消息来同步)
- QT的元类型和QT线程通信的方法