1

私はpthreadマルチスレッドコードに取り組んでおり、各スレッドはファイル記述子でread()を呼び出しています。read()はブロッキング呼び出しであるため、データを待機します。しかし、私はそれがデータを待つために3秒だけ待つことを望みます。

alarm()を使用してSIGALRMをハドリングすることを考えましたが、1つのスレッドでアラームを発生させると、すべてのスレッドがそのSIGALRMシグナルを受け取り、すべてのスレッドが読み取りを放棄します。どうすればいいですか?

4

1 に答える 1

5

selectそのためにコールを使用します。タイムアウトを指定できる引数が 1 つあります。

Linux の man ページにselectはサンプルの使用法があり、ここや Web 上の他の場所で多くの例を見つけることができます。

移植性について心配していない場合は、よりモダンで機能的なオプションがあります。

ライブラリを調べて、すべてを抽象化することをお勧めします。libeventは一見の価値があり、上記の OS 固有のインターフェースのほとんどをラップしています。

于 2012-04-15T06:18:08.490 に答える