c信号量sem_post最大值为0

时间:2015-02-23 05:40:12

标签: c multithreading semaphore

我有一个程序,其中一个线程运行一个任务,当它无法再根据条件运行它时,它会等待:

void thread1() { 
    while(...) { 
        if(can_do_stuff) { 
            //do stuff
        }
        else { 
            sem_wait(&sem);
        }
    }
}

通过调用sem_post,可以通过其他几个线程唤醒此线程(每个线程执行一个可导致thread1被唤醒的原因的单独任务):

void threadx() { 
    while(...) { 
        if(need_thread1_to_run) { 
            sem_post(&sem);
        }
        else { 
            //do stuff
        }
    }
}

然而,问题是每当thread1调用sem_wait时,它需要等待,这基本上意味着信号量应该具有的最大值为0.理想情况下,如果它已经为0并且一个名为sem_post的线程,该值不会改变。反正用C中的信号量来做这个吗?如果没有,C中是否有另一种同步方法可以做得更好?我认为线程可以在调用sem_getvalue之前调用sem_post以查看该值是否已经为0,但这不是线程安全的,我认为两个线程仍然可以同时调用sem_post同一时间。我也认为条件变量可能是一种可能性,但是那些需要互斥量而我真的不需要互斥量,因此我希望有更简单的东西。

0 个答案:

没有答案