首页 > 编程语言 > 详细

Windows线程同步

时间:2017-05-02 19:07:26      阅读:308      评论:0      收藏:0      [点我收藏+]

说到windows线程同步的方法,有循环锁,临界区(关键代码段),内核对象(Event,Semaphore,Mutex).甚至进程,线程handle等等。

说说用法:

  临界区和mutex都可以用于控制共享资源的互斥访问,不同点是 临界区是用户级对象,消耗小,速度快,但是不能跨进程。mutex是内核对象速度慢,但是可以跨进程。

  semaphore可以用来进行资源控制,信号量的两个关键参数,现有资源数和最大资源数,可以用于对资源的控制,通过ReleaseSemaphore对资源增加,WaitFor*函数对资源减小。

  Event可以用于通知,event的状态可以手动改变,用于通知所有等待线程(manual reset event)或者单个线程(auto reset event)是否运行。

 

说说注意点:

  Mutex是有线程属性的,Mutex内核对象中有线程ID,如果ID=0,则为已通知状态,WaitFor*函数返回,ID被设为获取的线程ID,ReleaseMutex之后ID又被设为0,其他线程就有机会获取mutex。如果线程没有ReleaseMutex异常退出,则mutex也会释放,ID被设为0,其他线程则有机会获得mutex。

  Event有两种用法,一种是自动重置,一种是手动重置。自动重置会在WaitFor*获取到event之后重置为未通知,这样只有一个等待线程(WaitFor*)会返回。手动重置则会一直等到ResetEvent才会重置为未通知状态,所以所有等待线程(WaitFor*)都会返回。

  Semaphore可以控制同时运行的线程数量,最大资源数确定了最多同时运行的线程数,现有资源数确定现在可以运行的线程数。(WaitFor*)减少资源,ReleaseSemaphore增加资源数,资源总数不超过最大资源数。

Windows线程同步

原文:http://www.cnblogs.com/zuiaichuichuifeng/p/6797515.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!