大家好,欢迎来到IT知识分享网。
无线程锁代码 火车票第100张重复两次
利用互斥对象实现同步
互斥对象mutex 包含一个使用数量,一个线程id 一个计数器.其中id用于标识系统中哪个对象拥有当前对象,计数器指明线程拥有该计数器的次数
HANDLE WINAPI CreateMutex( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全性 默认null _In_ BOOL bInitialOwner,//指定初始对象的默认拥有者,true为本线程 _In_opt_ LPCTSTR lpName//互斥对象的名称 null创建匿名互斥对象 );
当线程对共享资源访问结束的时候,应该调用ReleaseMutex释放该对象的拥有权 另外
线程必须主动请求共享对象的使用权才能获得该对象的所有权.
Dword WaitForSingleObject(HANDLE hHandle , DWORD dwmilliseconds);
hMutex = CreateMutex(NULL, FALSE, NULL);
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
线程在未释放互斥对象就终止的情况下,会自动设置互斥对象的id为0,引用为0
可以通过他的返回值 WaitForSingleObject 判断 线程是正常获取锁的 还是上次程序退出为释放才获得锁的,第二种情况容易引发未知状况
参考::msdn
孙鑫c++
HANDLE WINAPI CreateMutex( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, _In_ BOOL bInitialOwner, _In_opt_ LPCTSTR lpName );
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23354.html