2012-12-10 47 views
1

我有一个pthreads应用程序,我目前使用常规的linux管道来沟通和发送消息到各个线程。它的工作很好,并没有真正破碎,但我有一种唠叨的感觉,它可以改善。什么是Linux上的pthreads之间进行通信的最简单的方法

如果我想设计最短延迟,什么是最快的方法pthreads之间进行通信?使用条件变量会比管道更快吗?

我需要传递少量数据,作为一个带有几个参数的单个int optcode。 pthreads条件变量会让我在线程之间传递数据吗?

感谢,

-Andres

回答

1

因为它是在线程之间那么无论共享内存或无锁队列将是相当快一点。

选择哪一个取决于您传递的数据。两个线程之间共享的静态缓冲区很好。在生成数据并将其传递给另一个线程的地方,队列可能是更好的选择。

界lockfree MPMC队列的一些实施方案都可以在这里:http://www.1024cores.net

顺便说一句,小心写你自己的锁释放的数据结构。它们并不像你预期的那样微不足道。锁定版本将是一个好的开始,并且仍然会超出管道。

在您调用它们的过程之间(或者unix域套接字是一个不错的选项)。

1

使用线程而不是单独进程的主要优点是它们共享内存。通过管道发送数据需要在内核中进行往返,而将共享内存缓冲区与互斥量和条件变量一起使用可以避免这种情况 - 当然,它应该比使用管道的延迟要低。

您不使用条件变量直接传递感兴趣的数据。而是将数据放入两个线程共享的内存位置,并使用条件变量唤醒正在等待数据到达的线程。

相关问题