美文网首页
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