2010-10-11 51 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比條件變量更容易。當然,你需要保護你的隊列。根據對象的大小,它可能比消息隊列更適合,但是你需要實現自己的隊列。

兩者都可以在進程而不是線程之間使用。如果你決定使用進程而不是線程,你可以保持你的同步機制,而條件變量則不是這種情況。