多线程编程学习
两个线程依次交替打印数组。A线程打印A数组,B线程打印B数组。
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
bool flag = true;
mutex data_mutex;
condition_variable data_var;
int A[6] = { 1,2,3,4,5,6 };
int B[6] = { 4,5,6,7,8,9 };
int i = 0;
int j = 0;
void printA()
{
while (1)
{
unique_lock<mutex> lck(data_mutex);
data_var.wait(lck, [] {return flag; });
cout <<"A:"<< A[i] << endl;
i++;
if (i == 6)
{
flag = false;
data_var.notify_one();
break;
}
flag = false;
data_var.notify_one();
}
}
void printB()
{
while (1)
{
unique_lock<mutex> lck(data_mutex);
data_var.wait(lck, [] {return !flag; });
cout << "B:" << B[j] << endl;
j++;
if (j == 6)
{
flag = true;
data_var.notify_one();
break;
}
flag = true;
data_var.notify_one();
}
}
int main() {
thread tA(printA);
thread tB(printB);
tA.join();
tB.join();
return 0;
}