C 监视实现(同步)
任务是开发一个名为媒人的监视器。 我们有一个惯例:self();返回线程的id matchmaker方法必须执行以下操作: 称此例程为“交易”TID的线程。当线程a调用make_match()并返回值B时,这意味着线程ID B也调用make_match例程。为了使配对成为可能,make_match()可以随意将线程发送到睡眠状态 对于互斥和条件变量,必须使用pthread.h 这是我提出的代码,但因为这是一个书面作业,我无法评估它的正确性。我想得到一些反馈,看看这是否可行。先谢谢你C 监视实现(同步),c,operating-system,synchronization,C,Operating System,Synchronization,任务是开发一个名为媒人的监视器。 我们有一个惯例:self();返回线程的id matchmaker方法必须执行以下操作: 称此例程为“交易”TID的线程。当线程a调用make_match()并返回值B时,这意味着线程ID B也调用make_match例程。为了使配对成为可能,make_match()可以随意将线程发送到睡眠状态 对于互斥和条件变量,必须使用pthread.h 这是我提出的代码,但因为这是一个书面作业,我无法评估它的正确性。我想得到一些反馈,看看这是否可行。先谢谢你 unsign
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
}
我看不出是什么阻止你自己评估代码的正确性。围绕它编写一个测试程序来帮助您。见鬼,一开始只需将其编译成一个目标文件,而无需将其链接成一个程序。这至少可以帮助您根除拼写错误和语法错误。奇怪的是,您使用的是pthreads,而不是线程ID的库类型(
pthread\u t
)。您的self()
函数是否确实返回了unsigned int
?总的来说,您的代码中有几个问题,其中许多问题是编译器会向您揭示的(请确保提高警告级别),还有一些可能不会。更新您的代码,至少纠正前一种代码,然后我们再谈。