私はpthreadマルチスレッドコードに取り組んでおり、各スレッドはファイル記述子でread()を呼び出しています。read()はブロッキング呼び出しであるため、データを待機します。しかし、私はそれがデータを待つために3秒だけ待つことを望みます。
alarm()を使用してSIGALRMをハドリングすることを考えましたが、1つのスレッドでアラームを発生させると、すべてのスレッドがそのSIGALRMシグナルを受け取り、すべてのスレッドが読み取りを放棄します。どうすればいいですか?
select
そのためにコールを使用します。タイムアウトを指定できる引数が 1 つあります。
Linux の man ページにselect
はサンプルの使用法があり、ここや Web 上の他の場所で多くの例を見つけることができます。
移植性について心配していない場合は、よりモダンで機能的なオプションがあります。
epoll
機能があります。man ページにはサンプル コードがあります。この質問には、他の使用方法に関するいくつかのブログがリストされています。 kqueue
. ライブラリを調べて、すべてを抽象化することをお勧めします。libeventは一見の価値があり、上記の OS 固有のインターフェースのほとんどをラップしています。