170 похожих чатов

Как реализовать попеременную работу потоков через std::mutex? есть 2 потока,

оба считают от 0 до 100 и нужно сделать так:
main - 0
thread - 0
main - 1
thread - 1

7 ответов

22 просмотра

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

xor eax, eax- Автор вопроса
Dumitru Savva
можно создать общую переменную, которая будет хран...

а как мне сделать join на 2 потока сразу, чтобы они не блокировались?

xor eax, eax- Автор вопроса
Dumitru Savva
основной поток не нужно джоинить

а если у меня 2 объекта std::thread?

xor eax, eax
а если у меня 2 объекта std::thread?

Джойнишь первый а потом второй

xor eax, eax
а если у меня 2 объекта std::thread?

в любом случае в основном потоке нужно все сджоинить, и там он заблочится

Dumitru Savva
в любом случае в основном потоке нужно все сджоини...

std::mutex numMutex; std::condition_variable syncCond; auto bEvenReady = false; auto bOddReady = false; void printEven(int max){ for (unsigned i = 0; i <= max; i +=2){ std::unique_lock<std::mutex> lk(numMutex); syncCond.wait(lk, []{return bEvenReady;}); std::cout << i << ","; bEvenReady = false; bOddReady = true; syncCond.notify_one(); } } void printOdd(int max){ for (unsigned i = 1; i <= max; i +=2){ std::unique_lock<std::mutex> lk(numMutex); syncCond.wait(lk, []{return bOddReady;}); std::cout << i << ","; bEvenReady = true; bOddReady = false; syncCond.notify_one(); } } int main(){ auto max = 100; bEvenReady = true; std::thread t1(printEven, max); std::thread t2(printOdd, max); if (t1.joinable()) t1.join(); if (t2.joinable()) t2.join(); return 0; } вот тебе пример, два потока, один выводит только четные, второй нечетные, попеременная работа.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта