2012-04-15 7 views
0

Ich bin in C# codieren. Kann es zu einer Kollision kommen, wenn zwei Threads auf dieselbe serielle Schnittstelle schreiben? Wenn ja, wie kann ich damit umgehen? Außerdem möchte ich einem der Threads Priorität einräumen. Wenn beispielsweise zwei Threads an den seriellen Port schreiben, möchte ich die Übertragung von Thread 1 anhalten, wenn ich Daten von Thread 2 schreibe (d. H. Thread 2 hat Priorität gegenüber Thread 1 beim Schreiben in den Port).Kann es zu einer Kollision kommen, wenn zwei Threads auf dieselbe serielle Schnittstelle schreiben?


Vielen Dank für die Antworten. Aber eine meiner Fragen bleibt unbeantwortet. Sobald ich die Daten aus Thread 1 geschrieben habe. Es sollte lesen/schreiben von anderen Thread pausieren und diese Daten übertragen, dann weiter mit der pausierten Funktion.

+4

Das macht nicht viel Sinn, das Gerät am anderen Ende des Kabels wird furchtbar verwirrt werden. Verwenden Sie im Allgemeinen einen Mutex, um zwischen Threads zu arbitrieren. –

+0

Wie @HansPassant sagt, "Interrupt" ein Thread an einem beliebigen Punkt wird jede Protokolleinheit, die Sie verwenden, in Bits hacken. Muxtex, vielleicht. Wenn ein Thread "Priorität" hat, wird der andere Thread zum Prioritäts-Thread mit allen Daten, die er senden will, das prio. Thread kann dann damit umgehen, wenn es mit seinen eigenen Sachen fertig ist. –

Antwort

1

der MSDN-Dokumentation sagt:

„Threadsicherheit Alle öffentlichen static (Shared in Visual Basic) Member dieses Typs sind threadsicher Für Instanzelemente sind nicht sicher sein Gewinde garantiert..“ - http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

so müssen Sie es auf eigene Faust thread sicher machen. z.B.

void thread1() 
{ 
    lock(serialPort1) 
    { 
     serialPort1.Write(something); 
    } 
} 
void thread2() 
{ 
    lock(serialPort1) 
    { 
     serialPort1.Write(somethingelse); 
    } 
} 
+3

Das ist nur ein Spruch, es bedeutet nichts. Die Write() - Methode ist tatsächlich Thread-sicher, der Treiber stellt die implizite Sperre bereit. Das Hinzufügen einer eigenen Sperre ändert nichts. –

+0

Was? MDSN-Dokumentation irreführend? Schock! Grusel! –

+0

@MartinJames Es ist eigentlich nicht irreführend. Die Dokumentation garantiert nicht, dass es threadsicher ist, das heißt nicht, dass es nicht sein könnte. – Grozz