Когда я пишу многопоточные алгоритмы, я считаю, что для некоторых методов полезно иметь ожидание состояния мьютекса. У кого-то он уже заблокирован, у кого-то нет.
Я придумываю подход, как утверждать, что мьютекс уже должен быть заблокирован:
ASSERT(!mutex.try_lock_shared()); // assert if the mutex is not uniquely locked
ASSERT(!mutex.try_lock()); // assert if the mutex is not at least shared locked
Вопрос в том, как я мог бы сделать assert, который проверяет, что мьютекс не заблокирован ... из текущего потока. Например, если я сделаю это
if (mutex.try_lock()) {
mutex.unlock();
} else {
ASSERT(false); // the mutex is locked
}
очевидно, время от времени он дает сбой только потому, что какой-то другой поток заблокировал его.