2016-03-29 39 views
-2

Linuxでpthreadライブラリを使用してマルチスレッドサーバーアプリケーションを開発しています。接続されているクライアントごとに、デバイスとスレッドから2つの接続特定の条件が満たされるまで第1のスレッドループがwhileループで連続的に継続する。条件が満たされたときに第2のスレッドがフラグを設定し、それに基づいて最初のスレッドがwhileループを壊して必要なタスクを実行する。特定の条件が満たされるまでスレッドを効率的にブロックする方法

特定の条件が満たされるまで、Whileループをスレッド内で連続して実行しています。より適切な方法を指定してください。

+1

'mutex'と' condition'を使います。 –

+0

*特定の条件が満たされるまで、スレッド内でWhileループを継続的に実行しています。*いいえ。セマフォを作成します。 2番目のスレッドがそのセマフォで 'sem_wait()'を呼び出すようにします。次に、最初のスレッドが条件を満たすときに、 'sem_post()'を呼び出させます。 または、スレッドを1つだけ使用してください。 –

+0

「特定の」状態が何であるかを明記してください。ファイル/ソケットの読み書きを待っていますか?それとも別のスレッド内で設定されている 'フラグ'ですか?あなたはちょうど1つの(単純な)状態を待っているのですか、あるいはあなたの条件がより複雑です(あるファイルからの読み込み、ソケットへの書き込み、そして別のスレッドからのフラグの書き込みなど)?また、あなたがあなたのソースの(部品)を投稿するのに役立ちます。 –

答えて

3

すでにpthreadを使用しています。 http://linux.die.net/man/3/pthread_cond_wait (またはその他のpthreadの同期メカニズムが実際にあります)。

通常、whileループはCPUサイクルを無駄にします。

+0

完全なPOSIXの仕様を 'pthread_cond_wait()'にしてください:http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html – alk

+0

スピンロック(whileループ)が妥当ではない – SergeyA

+0

@SergeyA - もちろんですが、私は "Linuxでpthreadライブラリを使ってマルチスレッドサーバアプリケーションを扱う" – Ofir

関連する問題