Win32下两种用于C++的线程同步类(下)[VC/C++编程]
本文“Win32下两种用于C++的线程同步类(下)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
上一篇中我介绍了一种通过封闭Critical Section对象而便利的利用互斥锁的方法,文中全部的例子是两个线程对同一数据一读一写,因此需求让它们在这里互斥,不能同时拜候.而在实际情形中大概会有更复杂的情形呈现,就是多个线程拜候同一数据,一部份是读,一部份是写.我们知道只有读-写或写-写同时举行时大概会呈现问题,而读-读则可以同时举行,因为它们不会对数据举行改正,所以也有必要在C++中封装一种便利的答应读-读并发、读-写与写-写互斥的锁.要实现这种锁,利用临界区就很艰难了,不如改用内查对象,这里我利用的是互斥量(Mutex).
总体的构造与上一篇中的近似,都是写出一个对锁举行封装的基类,再写一个用于调用加、解锁函数的类,通过对第二个类的生命周期的管理实现加锁和解锁.这里触及到两个新问题,一是加锁、解锁行动都有两种,一种是加/解读锁,一种是加/解写锁;二是为了答应读-读并发,这里只声明一个Mutex是不够的,必必要声明多个Mutex,并且有多少个Mutex就同时允很多少个读线程并发,之所以这么说,是因为我们要利用的API函数是WaitForMultipleObjects.
WaitForMultipleObjects函数的功效就是等候对象状况被设置,MSDN中对它的阐明为:
Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses.
这是个很好用的函数,我们可以用它来等候某个或某几个对象,并且答应设置超不时间,等候成功时与超不时返回的值是差别的.假如返回的值比WAIT_ABANDONED小则表示等候成功.“等候成功”关于差别范例的内查对象有差别的意义,比方关于进程或线程对象,等候成功就表示进程或线程履行完毕了;关于互斥量对象,则表示此对象目前不被任何其他线程拥有,并且一旦等候成功,当前线程即拥有了此互斥量,其他线程则不能同时拥有,直接调用ReleaseMutex函数主动释放互斥量.
以上是“Win32下两种用于C++的线程同步类(下)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |