我已经收到一个任务,可以用一个信号量同步3个任务。
前两个任务生成随机数,第三个任务打印其总和。
因此,前两个任务应在开始处执行,而第三个任务应在结束处执行。到目前为止,下面的代码为我提供了我想要达到的最接近的结果,但是它显然不时陷入僵局,并且我无法找出一种仅使用一个信号量即可解决此问题的方法:(
semaphore sem;
int var1;
int var2;
void rndo(int& var) {
int i;
wait(sem);
var = random(10);
cout << var << "\n" << endl;
signal(sem);
}
void rndt(int& var) {
int i;
wait(sem);
var = random(10);
cout << var << "\n" << endl;
signal(sem);
signal(sem);
}
void prt(){
int sum;
wait(sem);
wait(sem);
wait(sem);
cout << var1 << "- 1 2 - " << var2 << "\n" << endl;
sum = var1 + var2;
cout << sum << " - full sum" << endl;
}
main(){
initialsem(sem,2);
cobegin {
rndt(var1); rndo(var2); prt();
}
cout << "All processes finished" << endl;
}