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

问题描述 投票:-1回答:1

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

我今天在文档中看到了IDXGIKeyedMutex。它有一种奇怪的方法来调用它,你可以调用两个方法:Acquire(Key)和Release(Key)。获取等待获取与密钥关联的“互斥锁”(共享资源),无论它处于什么线程。无论发布什么线程,Release都会释放共享资源。在调用相应的Release之前,预期NO线程调用Acquire导致Acquire被多次调用(对于相同的键)。

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

这让我想到:Windows Mutex可以这样使用,虽然它没有记录?如果我为两个进程创建一个互斥锁并将它们共享给它们,并在一个进程上调用WaitForSingleObject(m_hMutex,INFINITE),并在另一个进程中调用ReleaseMutex(m_hMutex),该怎么办?我假设这不起作用?或者它,但没有人用这种方式?

c++ mutex
1个回答
0
投票

不,这不能用简单的理由来做:保持相互排斥

我想你误解了IDXGIKeyedMutexRelease方法的文档简单地说:

回报价值

如果成功则返回S_OK。

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

尝试释放其他设备拥有的互斥锁时失败,请注意,互斥是针对共享资源的设备。

© www.soinside.com 2019 - 2024. All rights reserved.