QMutex блокирует в одном потоке и разблокирует в другом потоке
Могу ли я использовать QMutex странным образом: заблокировать QMutex в одном потоке, а затем разблокировать в другом?
2 ответа
Согласно документации QMutex это приводит к ошибке:
Попытка разблокировать мьютекс в потоке, отличном от того, который его заблокировал, приводит к ошибке.
Но вместо QMutex вы можете использовать QSemaphore в качестве двоичного семафора, чтобы добиться желаемого поведения.
//create
QSemaphore semaphore(1);
//lock in thread 1
semaphore.acquire();
//unlock in thread 2
semaphore.release();
Нет, вы не можете сделать это:
Документ для QMutex:: unlock ()
"Разблокирует мьютекс. Попытка разблокировать мьютекс в потоке, отличном от того, который заблокировал его, приводит к ошибке. Разблокировка мьютекса, который не заблокирован, приводит к неопределенному поведению".
Да, это действительно в разделяемой памяти, но нет способа изменить это стандартным способом.