如果下面的代码按照我放置它们的顺序执行,我可以确定线程1首先被线程3唤醒,后面跟着线程2吗?
main:
sem_init(&x,0,0);
thread 1:
sem_wait(&x);
thread 2:
sem_wait(&x);
thread 3:
sem_post(&x);
答案 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);