美文网首页
windows线程同步对象mutex

windows线程同步对象mutex

作者: CodingCode | 来源:发表于2023-01-11 06:10 被阅读0次
  1. 什么是mutex
    首先mutex是一个内核对象,不但可以用来做线程同步,还可以用来做进程间同步。

  2. 基本API
    2.1 创建mutext
    HANDLE aMutex = CreateMutex(NULL, FALSE, "abcd");

  • 3rd参数是mutex名字,如果在同一个进程内的多线程之间可以是空串,即不需要指定;但如果是多进程之间通信,通常需要指定名字,否则进程之间无法获取同一个mutex。
  • CreateMutex创建一个mutex,如果名字对应的mutex已经存在了,则打开的;于此相对于的OpenMutex则只是打开,不会创建。

2.2 等待一个mutex
DWORD ret = WaitForSingleObject(aMutex, INFINITE);

这个地方需要注意的是:

  1. 只有对方ReleaseMutex了,那么Wait才能返回。
  2. 如果对方没有ReleaseMutex,而直接调用CloseHandle,那么Wait也是不会返回的。
  3. 如果对方直接进程退出了,那么Wait是可以返回的,但是返回值是:WAIT_ABANDONED (https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitforsingleobject)

2.3 释放mutex
ReleaseMutex(child_mutex);
ReleaseMutex是和WaitXXX匹配使用的。

2.4 关闭mutex
CloseHandle(child_mutex);

相关文章

网友评论

      本文标题:windows线程同步对象mutex

      本文链接:https://www.haomeiwen.com/subject/umomcdtx.html