代码
让4个进程按顺序执行,并通过init(j)函数控制先执行的进程j
。
x=40说明锁机制成功
顺序输出ABCD…说明顺序执行成功
首字母输出ABCD…、BCDABCD…、CDABCD…、DABCD…说明控制先执行的进程成功。
#include <iostream>
#include <mutex>
#include <thread>
#include <condition_variable>
using namespace std;
mutex mtx;
condition_variable cv[4];
bool ready=false;
int turn=-1;
void fun(int *x,char c){
int idx=c-'A';
int next_idx=idx+1;
if(idx==3) next_idx=0;
for(int i=0;i<10;i++){
unique_lock<mutex> ulock(mtx);
while(!ready || turn!=idx) cv[idx].wait(ulock);
//mtx.lock();
int v=*x+1;
this_thread::sleep_for(chrono::milliseconds(10));
*x=v;
cout<<c;
//mtx.unlock();
turn++;
if(turn==4) turn=0;
cv[next_idx].notify_one();
}
}
void init(in