QMutex锁定在一个线程中并在另一个线程中解锁

时间:2013-09-10 19:52:09

标签: multithreading qt4 qmutex

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

2 个答案:

答案 0 :(得分:1)

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

  

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

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

//create
QSemaphore semaphore(1);

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

//unlock in thread 2
semaphore.release();

答案 1 :(得分:0)

不,你不能这样做:

Doc to QMutex :: unlock()

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

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