Интересно, почему я не могу сделать это в C++ 14 (или 17)Состояние переменной и общий мьютекс
std::shared_timed_mutex mutex;
std::unique_lock<std::shared_timed_mutex> lock(mutex);
std::condition_variable var;
while(!some_condition)
var.wait(lock);
Переменные условия кажутся только для работы с станд :: мьютекс. Но почему?
Вы можете поделиться с вами своим дефолтом? – inf
Что круто, так это то, что вы можете не только ждать «shared_timed_mutex», который «записывается заблокирован», как показано выше, вы также можете подождать, пока он «будет заблокирован», используя «shared_lock». Возможно, вам нужно подождать, пока поток писателя обновит информацию, чтобы вы могли ее опубликовать. –
Случай использования немного сложный: у меня есть хранилище данных с глобальным (на данный момент) блокировкой чтения/записи. А также блокировки для каждого объекта. Если я приобретаю объект, я сначала блокирую глобальную блокировку, извлекаю объект, блокирую объект, а затем отключаю глобальную блокировку. Теперь может быть случай, когда объект удаляется. Поэтому я не хочу ждать блокировки объекта (потому что эта блокировка тоже будет уничтожена), но вместо этого имеет переменную условия, которая просыпает пробуждение потоков, когда что-то меняется. Возможно, это не лучший дизайн, но он свободен от тупиков и не использует много памяти. –