用VC++5.0实现多线程的调度和处理
2008-11-13 19:33:05 来源:WEB开发网---- 同步类用于当访问资源时保证资源的整体性。其中CsyncObject 是其它四个同步类的基类,不直接使用。信号同步类CSemaphore 通常用于当一个应用程序中同时有多个线程访问一个资源(例如,应用程序允许对同一个Document 有多个View)的情况;事件同步类CEvent 通常用于在应用程序访问资源之前应用程序必须等待(比如,在数据写进一个文件之前数据必须从通信端口得到)的情况;而对于互斥同步类CMutex 和临界区同步类CcriticalSection 都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源(例如,该资源在一个DLL 当中)而后者则不允许对同一个资源的访问超出进程的范畴,而且使用临界区的方式效率比较高。
---- 同步访问类用于获得对这些控制资源的访问。CMultiLock 和CSingleLock 的区别仅在于是需要控制访问多个还是单个资源对象。
---- 5 同步类的使用方法
---- 解决同步问题的一个简单的方法就是将同步类融入共享类当中,通常我们把这样的共享类称为线程安全类。下面举例来说明这些同步类的使用方法。比如,一个用以维护一个帐户的连接列表的应用程序。该应用程序允许3 个帐户在不同的窗口中检测,但一次只能更新一个帐户。当一个帐户更新之后,需要将更新的数据通过网络传给一个数据文档。
---- 该例中将使用3 种同步类。由于允许一次检测3 个帐户,使用CSemaphore 来限制对3 个视窗对象的访问。当更新一个帐目时,应用程序使用CCriticalSection 来保证一次只有一个帐目更新。在更新成功之后,发CEvent 信号,该信号释放一个等待接收信号事件的线程。该线程将新数据传给数据文档。
---- 要设计一个线程安全类,首先根据具体情况在类中加入同步类做为数据成员。在例子当中,可以将一个CSemaphore 类的数据成员加入视窗类中,一个CCriticalSection 类数据成员加入连接列表类,而一个CEvent 数据成员加入数据存储类中。
更多精彩
赞助商链接