Mutex,Windows 10,c ++,在一个线程上获取,在另一个线程上发布

时间:2018-09-19 01:22:04

标签: c++ mutex

我知道Windows上的互斥通常如何工作。是的,当然可以,我可以创建一个测试程序来找出结果,我只是想知道在撰写本文之前是否有人知道。

我今天在文档中看到了一个IDXGIKeyedMutex。它有一个奇怪的调用方法,您可以在其中调用两种方法:Acquire(Key)和Release(Key)。 Acquire等待获取与该密钥关联的“互斥体”(共享资源),无论它位于哪个线程上。释放释放共享资源,无论它位于什么线程上。预期没有线程对Acquire的调用会导致在调用相应的Release(针对相同的密钥)之前多次调用Acquire。

以这种方式,可以完成锁定步骤的生产者/消费者,如下所示: 生产者:获取(0),写入共享资源,发布(1) 使用者:获取(1),读取共享资源,发布(0)

这让我开始思考:尽管没有记录,但可以以这种方式使用Windows Mutexes吗?如果我为两个进程创建一个互斥并将其共享给两个进程,然后在一个进程中调用WaitForSingleObject(m_hMutex,INFINITE),而在另一个进程中调用ReleaseMutex(m_hMutex)怎么办?我以为这不起作用?还是这样做,但是没人用这种方式?

1 个答案:

答案 0 :(得分:0)

不,这不能通过简单的原因完成:保持互斥

我认为您误解了IDXGIKeyedMutexRelease方法的文档只是说:

  

返回值

     

如果成功,则返回S_OK。

     

如果设备尝试释放无效或无效的键控互斥锁   由设备拥有,ReleaseSync返回E_FAIL。

尝试释放另一台设备拥有的互斥锁时失败,请注意,此处的互斥对象是共享资源的设备