Я написал простой код, в котором я беру уникальный_lock и разблокирую мьютекс вместо того, чтобы вызывать разблокировку самой блокировки. Когда первый поток входит в критический раздел и вызывает my_mutex.unlock(), многие другие потоки входят в критический раздел вместе.Вызов разблокировки на мьютексе, связанный с уникальным_блоком, вызывает неопределенное поведение
std::mutex my_mutex;
void sample() {
std::unique_lock<std::mutex> lock(my_mutex);
// Critical section
my_mutex.unlock();
}
Почему это происходит? Неправильно ли вызывать разблокировку на мьютексе, хранящемся в уникальном_блоке? Благодаря!
Спасибо! На самом деле у меня не было локального мьютекса в моем фактическом коде. Я обновлю код в вопросе. – kwadhwa