2010-10-11 137 views
0

我有一个工作线程,从程序的开始处于活动状态,并且会始终从队列中取出一个对象进行处理。我想知道什么是最好的方法来阻止线程?该对象将以大约每数十微秒的量级(在10-100微秒之间)被推入队列中。我应该设置线程在一个恒定的时间睡眠,还是应该在线程之间制定一些信号机制?我想主要关注性能问题。有任何想法吗?Posix线程通信Linux

谢谢。

回答

0

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

1

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

跟着them

+0

这正是条件变量的用途。消费者在条件变量上等待,并且当生产者添加到队列中时,它发信号通知条件变量来唤醒消费者。 – Jonathan 2010-10-12 19:26:33

1

Posix message queues看起来像一个很好的候选人,如果你的数据不是太大。 你也可以使用一个POSIX semaphore

生产者线程放在一个队列中的数据,并使用sem_wait做一个sem_post
消费者线程等待,并从队列中删除数据。

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

两者都可以在进程而不是线程之间使用。如果你决定使用进程而不是线程,你可以保持你的同步机制,而条件变量则不是这种情况。