這是我的場景:我需要從多個線程中讀取和寫入相同的串行端口。不是在每個線程中創建一個SerialPort,這會導致「訪問被拒絕」錯誤,而是使用一種全局緩存來完成這項工作。對於每個串口,我只保留一個串口對象。我是否需要將讀取和寫入操作同步到同一個SerialPort實例?
private static object locker = new object();
internal static Dictionary<int, SerialPort> SerialPorts = new Dictionary<int, SerialPort>();
private SerialPort GetSerialPort(string port)
{
lock (locker)
{
if (!SerialPorts.ContainsKey(port))
{
SerialPort sp = new SerialPort(port, baudrate);
sp.Open();
SerialPorts[key] = sp;
}
}
return SerialPorts[key];
}
在讀寫操作中,我首先調用GetSerialPort來獲取SerialPort對象。然後調用相應的ReadByte和Write方法。現在我的問題是:沒有任何特殊的處理,是否有多個線程同時調用ReadByte或Write方法是安全的?
如果寫入命令的線程也需要獲取響應,您將需要一個Mutex。通常情況是這樣。當然是一個非常重要的併發風險。 – 2014-10-10 17:29:53
爲什麼在這種情況下我需要互斥鎖? – Nico 2014-10-11 00:44:19