QMutex lock in one thread and unlock in the other thread

1.4k views Asked by At

Am I allowed to use the QMutex in the strange way: lock the QMutex in one thread, then unlock it in the other thread?

2

There are 2 answers

0
Istador On BEST ANSWER

According to the documentation of QMutex this results in an error:

Attempting to unlock a mutex in a different thread to the one that locked it results in an error.

But instead of a QMutex you can use a QSemaphore as a binary semaphore, to achieve the wanted behavior.

//create
QSemaphore semaphore(1);

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

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

No, you can't do that:

Doc to QMutex::unlock()

"Unlocks the mutex. Attempting to unlock a mutex in a different thread to the one that locked it results in an error. Unlocking a mutex that is not locked results in undefined behavior."

Yes, it is indeed in shared memory, but there's no way to change it in a standard way.