Question

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

Was it helpful?

Solution

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();

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top