シリアル通信に使用されるマルチスレッド Linux プログラムで、別のスレッドからのブロッキング read() 呼び出しを終了することは可能ですか (そして何が最善のアプローチでしょうか)?
すべてを可能な限り反応的に保ち、ポーリングを繰り返してタイムアウトを使用しないようにしたいと考えています。
この質問の背景は、JNI を使用して Linux 用の Scala シリアル通信ライブラリを作成しようとしているということです。私はネイティブ側をできるだけシンプルに保ち、特に read() と close() 関数を提供しようとしています。Scala 側では、1 つのスレッドが read() を呼び出し、シリアル ポートからのデータが利用可能になるまでブロックします。ただし、シリアルポートは他の方法で閉じることができ、その結果、close() が呼び出されます。ここで、ブロックされたスレッドを解放するには、システムの読み取り呼び出しをキャンセルする必要があります。