当前位置: 技术问答>linux和unix
linux多线程怎么实现等待队列
来源: 互联网 发布时间:2017-01-31
本文导语: 比如我用一类线程模拟火车,一类线程模拟火车行驶路段上的控制台。 我用互斥锁和条件变量控制各个(火车)线程的行进。 现在有两种路段,第一种是行车路段,不能停。 另一种是可以让多辆火车在里面停的“车...
比如我用一类线程模拟火车,一类线程模拟火车行驶路段上的控制台。
我用互斥锁和条件变量控制各个(火车)线程的行进。
现在有两种路段,第一种是行车路段,不能停。
另一种是可以让多辆火车在里面停的“车库”路段(以队列的方式停)。
我应该怎么编码才能够实现: 在“车库”路段里,如果控制台线程放行火车线程,则放行的是第一辆进“车库”的火车(线程),而不是在“车库”里的多辆火车里任选一辆等待条件变量的放行之。
因为单用pthread_cond_signal,它释放被阻塞在条件变量cond上的一个线程。多个线程阻塞在此条件变量上时,哪一个线程被唤醒是由线程的调度策略所决定的。
所以需要用等待队列,是吧?
应该怎么设计呢?
谢谢!
我用互斥锁和条件变量控制各个(火车)线程的行进。
现在有两种路段,第一种是行车路段,不能停。
另一种是可以让多辆火车在里面停的“车库”路段(以队列的方式停)。
我应该怎么编码才能够实现: 在“车库”路段里,如果控制台线程放行火车线程,则放行的是第一辆进“车库”的火车(线程),而不是在“车库”里的多辆火车里任选一辆等待条件变量的放行之。
因为单用pthread_cond_signal,它释放被阻塞在条件变量cond上的一个线程。多个线程阻塞在此条件变量上时,哪一个线程被唤醒是由线程的调度策略所决定的。
所以需要用等待队列,是吧?
应该怎么设计呢?
谢谢!
|
那就设置多个信号量控制火车,想放哪个放哪个
话说楼主的结帖率
话说楼主的结帖率
|
可以直接使用消息队列的API啊
int msgget(key_t key, int msgflg)
int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, long msgtyp, int msgflg);
int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg);
int msgctl(int msqid, int cmd, struct msqid_ds *buf);