WEB开发网
开发学院软件开发VC VC中利用多线程技术实现线程之间的通信 阅读

VC中利用多线程技术实现线程之间的通信

 2008-12-06 19:59:32 来源:WEB开发网   
核心提示: 运行这个程序,当关闭程序时,VC中利用多线程技术实现线程之间的通信(6),才显示提示框,显示"Thread ended",同时启动两个线程,它们对应的函数分别为WriteThread()和ReadThread(),4、线程之间的同步前面我们讲过,各个线程可以访问进程中的

运行这个程序,当关闭程序时,才显示提示框,显示"Thread ended"。

4、线程之间的同步

前面我们讲过,各个线程可以访问进程中的公共变量,所以使用多线程的过程中需要注意的问题是如何防止两个或两个以上的线程同时访问同一个数据,以免破坏数据的完整性。保证各个线程可以在一起适当的协调工作称为线程之间的同步。前面一节介绍的事件对象实际上就是一种同步形式。Visual C++中使用同步类来解决操作系统的并行性而引起的数据不安全的问题,MFC支持的七个多线程的同步类可以分成两大类:同步对象(CsyncObject、Csemaphore、Cmutex、CcriticalSection和Cevent)和同步访问对象(CmultiLock和CsingleLock)。本节主要介绍临界区(critical section)、互斥(mutexe)、信号量(semaphore),这些同步对象使各个线程协调工作,程序运行起来更安全。

(一) 临界区

临界区是保证在某一个时间只有一个线程可以访问数据的方法。使用它的过程中,需要给各个线程提供一个共享的临界区对象,无论哪个线程占有临界区对象,都可以访问受到保护的数据,这时候其它的线程需要等待,直到该线程释放临界区对象为止,临界区被释放后,另外的线程可以强占这个临界区,以便访问共享的数据。临界区对应着一个CcriticalSection对象,当线程需要访问保护数据时,调用临界区对象的Lock()成员函数;当对保护数据的操作完成之后,调用临界区对象的Unlock()成员函数释放对临界区对象的拥有权,以使另一个线程可以夺取临界区对象并访问受保护的数据。同时启动两个线程,它们对应的函数分别为WriteThread()和ReadThread(),用以对公共数组组array[]操作,下面的代码说明了如何使用临界区对象:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:VC 利用 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接