日期:2014-05-16  浏览次数:20673 次

linux多线程怎么实现等待队列
比如我用一类线程模拟火车,一类线程模拟火车行驶路段上的控制台。
我用互斥锁和条件变量控制各个(火车)线程的行进。
现在有两种路段,第一种是行车路段,不能停。
另一种是可以让多辆火车在里面停的“车库”路段(以队列的方式停)。
我应该怎么编码才能够实现: 在“车库”路段里,如果控制台线程放行火车线程,则放行的是第一辆进“车库”的火车(线程),而不是在“车库”里的多辆火车里任选一辆等待条件变量的放行之。
因为单用pthread_cond_signal,它释放被阻塞在条件变量cond上的一个线程。多个线程阻塞在此条件变量上时,哪一个线程被唤醒是由线程的调度策略所决定的。
所以需要用等待队列,是吧?
应该怎么设计呢?

谢谢!


------解决方案--------------------
那就设置多个信号量控制火车,想放哪个放哪个

话说楼主的结帖率
------解决方案--------------------
可以直接使用消息队列的API啊
C/C++ code

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);