等等&信号顺序

时间:2010-10-19 11:42:47

标签: c pthreads semaphore

如果下面的代码按照我放置它们的顺序执行,我可以确定线程1首先被线程3唤醒,后面跟着线程2吗?

main:
sem_init(&x,0,0);

thread 1:
sem_wait(&x);

thread 2:
sem_wait(&x);

thread 3:
sem_post(&x);

1 个答案:

答案 0 :(得分:1)

没有理由做出这样的假设。它取决于线程1和线程2何时正在调用sem_wait(),即它们之前执行的操作以及调度程序如何为它们运行CPU。如果你想在线程2之前唤醒该线程1,你需要另一个信号量:

main:
sem_init(&x,0,0);
sem_init(&y,0,0);

thread 1:
sem_wait(&x);
sem_post(&y);

thread 2:
sem_wait(&y);

thread 3:
sem_post(&x);