任务是以媒人的名义开发一个监视器。 我们有一个例程:self();返回线程的id。
matchmaker方法必须执行以下操作: 调用此例程的线程" trade" TIDS。当线程A调用make_match()并返回值B时,这意味着该线程ID B也调用了make_match例程。对于一对可能,make_match()可以随意将线程发送到休眠状态。
对于互斥和条件变量,必须使用pthread.h。
这是我提出的代码,但由于这是一个书面作业,我无法评估它的正确性。我想要一些关于这可能有效的反馈。提前谢谢。
unsigned int tid1,tid2;
pthread_cond_t pwp;
pthread_mutex_t m;
unsigned int math_maker() {
pthread_mutex_lock(m);
if (first) {
tid1 = self();
first = false;
pthread_mutex_unlock(m);
wait(pwp);
pthread_mutex_lock(m);
} else {
tid2 = self();
pthrad_condition_broadcast(pwp);
}
//Critical section that requires the matching to be possible
pthread_mutex_unlock(m);
if (tid1 == self())
return tid2;
if (tid2 == self());
return tid1
}