在线程争用下等待的最快方法

时间:2012-01-20 21:01:19

标签: c++ optimization pthreads wait

我在Linux上使用pthread。我有一个循环缓冲区来将数据从一个线程传递到另一个线程。也许循环缓冲区不是这里使用的最佳结构,但改变它不会使我的问题消失,所以我们只是将它作为队列引用。

每当我的队列为满或空时,pop / push操作返回NULL。这是有问题的,因为我的线程定期开火。等待另一个线程循环需要太长时间。

我尝试过使用信号量(sem_post,sem_wait),但在争用时解锁最多需要25毫秒,这与我的循环速度有关。我已尝试等待pthread_cond_t,但解锁时间需要10到15毫秒。

我可以使用更快的机制来等待数据吗?

编辑*

好的,我使用了条件变量。我在嵌入式设备上,因此添加“更多内核或CPU功率”不是一种选择。这让我意识到我已经设置了各种各样的线程优先级,所以我会在进一步之前对此进行排序

1 个答案:

答案 0 :(得分:4)

您应该使用条件变量。唯一更快的方法是特定于平台,并且它们的速度可以忽略不计。

您只是因为线程正在取消预定而看到您认为性能不佳的内容。当您的线程接近其时间片的末尾并且调度程序允许未阻塞的线程抢占正在运行的线程时,您会看到很长的“延迟”。如果您有多个核心而不是线程或将您的线程设置为更高的优先级,您将看不到这些延迟。

但是这些延迟实际上是一件好事,你不应该担心它们。其他线程也有机会运行。