Обмен сигналами между потоками

123
17 ноября 2020, 10:00

Запускаются два потока. Потокам на выполнение даётся одна и та же функция. Функция работы потока выглядит следующим образом: выполняется некое вычисление, затем поток смотрит, закончил ли вычисления 2ой поток. Если не закончил, то поток ложиться спать и просыпается, когда закончит вычисления 2ой поток. Ниже вычисления имитируются при помощи метода sleep()

void func(int time) {
   this_thread::sleep_for(chrono::seconds(time)); //имитация вычислений
   if(второй поток не закончил вычисления)
      этот поток засыпает и просыпается, когда второй поток закончит 
      вычисления
}
int main() {
   thread th1(func, 10);
   thread th2(func, 50);
   th1.join();
   th2.join();
   return 0;
} 

Я думал про условную переменную, но, насколько я понимаю, для этого нужно что-бы потоки запускали разные функции, а в примере выше оба запускают одну и ту же функцию func(). Если какой-то способ, как в pthread например, где есть обмен сигналами между потоками без условных переменных

READ ALSO
Не могу очистить массив [закрыт]

Не могу очистить массив [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

120
Проблема с JS/jQuery и Brackets

Проблема с JS/jQuery и Brackets

Вот такая проблема JS/jQuery

131
Почему ajax запрос завершается с ошибкой?

Почему ajax запрос завершается с ошибкой?

У меня есть REST контроллер, который может удалять/вставлять/редактировать данные из бд, отображаю на jsp странице таблицу с соответствующими...

109