【发布时间】:2012-11-22 16:40:51
【问题描述】:
我有两个线程。 从队列中读取的一个。我不希望它在 while(1) 上运行来读取,所以我正在考虑在每次循环时给它一个条件变量:
while(1){
while queue is not empty
wait(cond)
pop()
}
代替:
while(1){
while queue is not empty
pop
}
和一个推送到队列的线程。如果我使用等待和信号方法,那么该线程需要通过每次推送弹出线程来通知(!) 问题是什么更好用? 如果队列大部分不是空的,那么发送信号是没有价值的(或者不是?)因为弹出线程没有等待,我担心它会降低性能。 但是,如果队列有一半时间是空的,那么在第二个 pop 方法中循环它可能是一个忙碌的等待。
我希望这里有人会通过取消向没有等待它的线程发送信号仍然可以的事实来消除我的恐惧
谢谢
【问题讨论】:
-
这些操作的性能是否有任何影响取决于您的程序正在执行的其他操作,因此衡量性能的唯一明智做法是衡量性能。
-
另外,使用条件变量使 push 和 pop 原子化的必要性通常是设计要求,而不是您可以决定不做的事情。
标签: c++ linux pthreads signals wait