Posix线程通信Linux

时间:2010-10-11 09:18:39

标签: c++ linux

我有一个工作线程,它从程序开始就处于活动状态,并且会一直从队列中取出一个对象进行处理。我想知道阻止线程的最佳方法是什么?该对象将以大约每几十微秒(10-100微秒)的大小推入队列。我应该将线程设置为以恒定周期休眠还是应该在线程之间设置一些信号机制?我想主要关注性能问题。有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:1)

另一方面,只要是pthreads的通用功能,就可以使用条件变量。条件变量是在pthread互斥锁上设计的,因此它们是非常有效的同步原语(当然取决于实际的平台)。

关注them

答案 1 :(得分:1)

如果你的数据不是太大,

Posix message queues看起来是个好人选。 您还可以使用POSIX semaphore

生产者线程将数据放入队列,并执行sem_post
消费者线程使用sem_wait等待,并从队列中删除数据。

使用IMO比使用条件变量更容易。当然你需要保护你的队列。根据对象的大小,它可能比消息队列更合适,但您需要实现自己的队列。

两者都可以在进程而不是线程之间使用。如果您决定使用进程而不是线程,则可以保留同步机制,而不是条件变量。

答案 2 :(得分:0)

在阻止模式(mq_open等)中使用POSIX消息队列,这非常简单,看看它们是否满足您的性能要求。如果没有,请问另一个问题:)