Ist es sicher, zu Lesen und zu schreiben, um einen seriellen port zur gleichen Zeit über verschiedene threads?
Ist es sicher zu Lesen und zu schreiben, um einen seriellen port zur gleichen Zeit über verschiedene threads (ein thread Lesen und einen schreib-thread)? Wäre es notwendig, hinzufügen, sperren um das Lesen/schreiben in jedem thread?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Dokumentation der SerialPort:
Da Lesen und Schreiben sind nicht statisch, Sie würde nicht threadsicher sind. Es ist eine sehr schlechte Idee, in jedem Fall, da die SerialPort-Klasse verwaltet die internen Puffer für Sie.
Müssen Sie zum synchronisieren Ihres I/O auf den seriellen port.
Lesen und schreiben auf die serielle Schnittstelle "zur gleichen Zeit" aus verschiedenen threads ist ein standard-Weg zu handle seriellen Anschluss Kommunikation: ein thread-handles zu Lesen, und man behandelt das schreiben. Akzeptabel.
Gibt es eine Reihe von seriellen Geräten, die Daten senden asynchron zu der host-Maschine, während immer noch so dass Befehle gesendet werden, um das Gerät selbst: Geräte wie barcode-Scannern, tag Scanner und Kameras.
Probleme?
Probleme entstehen, wenn Sie versuchen, zu synchronisieren, Ihre Kommunikation zu und von dem Gerät.
Zum Beispiel, Sie wollen, schreiben Sie einen Befehl und dann sofort wieder zu Lesen, keine Antwort. Nun, in diesem Fall würden Sie die Aussetzung der lese-thread und manuell Lesen Sie alle Daten aus dem seriellen port nachdem Sie geschrieben das Kommando. Nachdem der Befehl verarbeitet wurde, der Lesen, thread kann start-up wieder.
Zusammenfassung
Im Allgemeinen durch, würde ich vorschlagen, nur die haben einen extra thread, der alle Abläufe der Lektüre von port-Daten und feuert off-Veranstaltungen, wie
DataReceived
und führen Sie alle schreibt von Ihrem Haupt-thread.Ich würde erwarten, dass der konkrete Fall, den Sie beschreiben, mit 1 Lesen und 1 Schreiben Sie thread-sicher sein.
Read-und Write-Kanäle auf die hardware sind entworfen, um verwendet werden, full-duplex, und die software sollte so gestaltet werden, unterstützen das auch.
Und zwar konnte ich nicht finden, eine explizite Aussage zu diesem Beispiel auf der MSDN-Seite für die SerialPort - schreibt auch aus dem Hauptthread, während er liest, auf der anderen Seite. Ohne Verriegelung.