0

私はc#でコーディングしています。2 つのスレッドが同じシリアル ポートに書き込みを行っている場合、衝突が発生する可能性はありますか? はいの場合、どうすればこれを処理できますか? また、いずれかのスレッドを優先したいと考えています。

たとえば、2 つのスレッドがシリアル ポートに書き込みを行っている場合、スレッド 2 からデータを書き込むときにスレッド 1 の送信を停止したいとします (つまり、ポートへの書き込み時にスレッド 2 がスレッド 1 よりも優先されます)。


回答ありがとうございます。しかし、私の質問の 1 つが未回答のままです。スレッド 1 から書き込まれるデータを取得するとすぐに、他のスレッドからの読み取り/書き込みを一時停止し、このデータを送信してから、一時停止した関数を続行する必要があります。

4

1 に答える 1

0

msdnのドキュメントには次のように書かれています。

「スレッドセーフこのタイプのパブリックスタティック(Visual Basicで共有)メンバーはスレッドセーフです。インスタンスメンバーはスレッドセーフであるとは限りません。」-http ://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

したがって、自分でスレッドセーフにする必要があります。例えば

void thread1()
{
    lock(serialPort1)
    { 
         serialPort1.Write(something);
    }
}
void thread2()
{
    lock(serialPort1)
    { 
         serialPort1.Write(somethingelse);
    }
}
于 2012-04-15T13:32:35.007 に答える