C 监视实现(同步)

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

任务是开发一个名为媒人的监视器。 我们有一个惯例:self();返回线程的id

matchmaker方法必须执行以下操作: 称此例程为“交易”TID的线程。当线程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
}

我看不出是什么阻止你自己评估代码的正确性。围绕它编写一个测试程序来帮助您。见鬼,一开始只需将其编译成一个目标文件,而无需将其链接成一个程序。这至少可以帮助您根除拼写错误和语法错误。奇怪的是,您使用的是pthreads,而不是线程ID的库类型(
pthread\u t
)。您的
self()
函数是否确实返回了
unsigned int
?总的来说,您的代码中有几个问题,其中许多问题是编译器会向您揭示的(请确保提高警告级别),还有一些可能不会。更新您的代码,至少纠正前一种代码,然后我们再谈。