たとえば、ウィンドウ上にメッセージ、ソケットイベント、非同期io(IOCompletionRoutine)、およびmutexハンドルを非同期に待機させるMsgWaitForMultipleObjectsがあります。pthreadsを使用してプラットフォーム上で非同期スレッド間通信を行う方法
Unixでは、pthread_mutexのロックが解除されたときに中断する可能性を除いて、すべてを選択/選択できます。
物語:
私は複数のソケット、パイプやファイルで何かをするメインスレッドを持つアプリケーションを持っています。今では時々、サイドジョブ(dbトランザクション)があり、これは時間がかかり、メインスレッドで同期して実行すると、ソケットの通常のサービスが中断されます。だから私は別のスレッドでDB操作をしたい。そのスレッドは、メインスレッドが何らかの仕事をしてmutexをロック解除してdbスレッドがそれをつかむことができるまで、アイドル時にいくつかのミューテックスを待機します。 問題は、dbスレッドがジョブを終了したメインスレッドにどのように通知できるかです。メインスレッドはソケットを処理しなければならないので、pthread_mutex_lockでスリープ状態にすることはできません。定期的にpthread_mutex_trylockを実行することは、私がやりたいことです。現在、パイプの使用を検討していますが、これはより良い方法ですか?
はい、質問は、パイプより安いものがあります。 –
ptsが正しい場合は、パイプを使用してください。あなたが記述したもの(選択/ポーリング/ kqueueモデル)によく似ています。 –