Повысить общий мьютекс, если он заблокирован в том же потоке

Когда я пишу многопоточные алгоритмы, я считаю, что для некоторых методов полезно ожидать состояния мьютекса. Для кого-то это уже заперто, для кого-то это не так.

Я придумываю подход, как утверждать, что мьютекс уже должен быть заблокирован:

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

Вопрос в том, как я могу утверждать, что проверяет, что мьютекс не заблокирован... из текущего потока. Например, если я сделаю это

     if (mutex.try_lock()) {
        mutex.unlock();
     } else {
        ASSERT(false); // the mutex is locked
     }

очевидно, что время от времени происходит сбой только потому, что какой-то другой поток заблокирован.

1 ответ

boost имеет рекурсивные и нерекурсивные мьютексы. Если функция реентерабельна, используйте рекурсивный мьютекс. Тогда вам не нужно беспокоиться, заблокировал ли его текущий поток.

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