単一のコンピューター端末から複数の医療機器を制御するために、少し複雑な通信プロトコルの一部をコーディングしています。コンピュータ端末は、このようなデバイスを約20台管理する必要があります。すべてのデバイスは、DEPと呼ばれる通信で同じプロトコルを使用します。ここで、さまざまなデバイス内で多重化してリクエストを送信し、特定のデバイスに関連付けられた患者データを受信するループを作成しました。したがって、このループの構造は、一般的に次のようになります。
Begin Loop
Select Device i
if Device.Socket has Data
Strip Header
Copy Data on Queue
end if
rem_time = TIMEOUT - (CurrentTime - Device.Session.LastRequestTime)
if TIMEOUT <= 0
Send Re-association Request to Device
else
Sort Pending Request According to Time
Select First Request
Send the Request
Set Request Priority Least
end Select
end if
end Select
end Loop
上記の擬似コードで間違いを犯した可能性がありますが、このループが何をしようとしているのかを明確にしたことを願っています。デバイスとそのデバイスの保留中のリクエストを選択する優先リスト構造を使用しているため、すべてのリクエストとデバイスが最適な間隔で選択されます。
上記のループは実際に受信したデータを解析しませんが、ヘッダーを取り除き、キューに入れるだけです。キュー内のデータは別のスレッドで解析され、ファイルまたはデータベースに記録されます。
他のコンピューターもデータをインポートして、コンピューター端末に接続されているデバイスをリモートで制御できるようにする機能を追加したいと思います。このために、このINFINITE LOOPでコマンドをリッスンし、PARSINGが実行される別のスレッドでデータを送信するソケットを作成する必要があります。
さて、すべての並行性の専門家への私の質問は、次のとおりです。2つの異なるスレッドでの読み取りと書き込みに単一のソケットを使用するのは良い設計ですか?各スレッドが、両方ではなく読み取りまたは書き込みのいずれかに厳密に関与する場合。また、ソケットはプロセスレベルで同期されていると思いますが、異なるスレッドからの1つのソケットで読み取りと書き込みを同期するには、ロックが必要ですか?