Можем ли мы использовать два разных мьютекса при ожидании одной и той же условной переменной?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можем ли мы использовать два разных мьютекса при ожидании одной и той же условной переменной?

Сообщение Anonymous »

Рассмотрите приведенный ниже сценарий:
Последовательность 1

Код: Выделить всё

mutexLk1_
gcondVar_.wait(mutexLk1);
Тема 2

Код: Выделить всё

mutexLk2_
gcondVar_.wait(mutexLk2);
Тема 3

Код: Выделить всё

condVar_
gcondVar_.notify_all();
Я наблюдаю, что notify_all() пробуждает не оба потока, а только один из двух. Если бы я заменил mutexLk2 на mutexLk1. Я получаю функциональный код.
Чтобы воспроизвести проблему, рассмотрим ниже измененный пример из cppref

Код: Выделить всё

#include 
#include 
#include 
#include 

std::condition_variable cv;
std::mutex cv_m1;
std::mutex cv_m; // This mutex is used for three purposes:
// 1) to synchronize accesses to i
// 2) to synchronize accesses to std::cerr
// 3) for the condition variable cv
int i = 0;

void waits1()
{
std::unique_lock lk(cv_m);
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/70393722/can-we-use-two-different-mutex-when-waiting-on-same-conditional-variable[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»