Например, есть следующий код:
Код: Выделить всё
/*
g++ -std=c++0x -pthread -o threads threads.cpp
*/
#include <iostream>
#include <thread>
#include <mutex>
#define MAX_THREADS 2
std::mutex m;
int i;
void func(const int n){
m.lock();
for(i = 0; i < 8; i++){
std::cout << "thread number: " << n << std::endl;
std::cout << " i: " << i << std::endl;
m.unlock();
}
}
int main(int argc, char *argv[]){
std::thread thr[MAX_THREADS];
for(int i = 0; i < MAX_THREADS; i++){
thr[i] = std::thread(func, i);
}
for(int i = 0; i < MAX_THREADS; i++){
thr[i].join();
}
return 0;
}Как организовать работу потоков с помощью мьютекса таким образом, чтобы потоки входили в цикл по очереди?
Например:
поток=0 | i =0
поток=1 | i =1
поток=0 | i =2
поток=1 | i =3
поток=0 | i =4
поток=1 | i =5
поток=0 | i =6
поток=1 | i =7
А то получается так, что первый поток вошёл в цикл, прошёл все итерации, вышел. А за ним второй поток вошёл и тоже прошёл все итерации. Нужно сделать так, чтобы потоки не выполняли одну и ту же работу, а работали синхронно.
Подскажите, как правильно организовать такую работу?
Благодарю.