1

我是否可以以奇怪的方式使用 QMutex:将 QMutex 锁定在一个线程中,然后在另一个线程中解锁它?

4

2 回答 2

2

根据QMutex的文档,这会导致错误:

尝试在与锁定它的线程不同的线程中解锁互斥锁会导致错误。

但是,您可以使用QSemaphore作为二进制信号量来代替 QMutex,以实现所需的行为。

//create
QSemaphore semaphore(1);

//lock in thread 1
semaphore.acquire();

//unlock in thread 2
semaphore.release();
于 2015-02-23T09:13:40.817 回答
1

不,你不能这样做:

文档到 QMutex::unlock()

“解锁互斥锁。尝试在与锁定它的线程不同的线程中解锁互斥锁会导致错误。解锁未锁定的互斥锁会导致未定义的行为。”

是的,它确实在共享内存中,但没有办法以标准方式更改它。

于 2013-09-19T23:10:54.587 回答