【发布时间】:2014-10-10 13:35:21
【问题描述】:
这是我的场景:我需要在多个线程中读取和写入同一个串行端口。我没有在每个线程中创建一个 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。通常情况就是这样。当然是相当严重的并发风险。
-
为什么在这种情况下我需要 Mutex?
标签: multithreading serial-port