vc++ 线程和线程锁 (一)

vc++ 线程和线程锁 (一)无线程锁代码火车票第100张重复两次利用互斥对象实现同步互斥对象mutex包含一个使用数量,一个线程id一个计数器.其中id用于标识系统中哪个对象拥有当前对象,计数器指明线程拥有该计数器的次数HANDLEWINAPICreateMutex(_In_opt_ LPSECURITY_ATTRIBUTESlpMutexAttributes,//安全性

大家好,欢迎来到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

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信