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

"Разблокирует мьютекс. Попытка разблокировать мьютекс в потоке, отличном от того, который заблокировал его, приводит к ошибке. Разблокировка мьютекса, который не заблокирован, приводит к неопределенному поведению".

Да, это действительно в разделяемой памяти, но нет способа изменить это стандартным способом.

Другие вопросы по тегам