Multithreading 是否需要将读写操作同步到同一个SerialPort实例?
下面是我的场景:我需要在多个线程中读取和写入同一个串行端口。我没有在每个线程中创建一个SerialPort(这会导致“拒绝访问”错误),而是使用某种全局缓存来完成这项工作。对于每个串行端口,我只保留一个SerialPort对象Multithreading 是否需要将读写操作同步到同一个SerialPort实例?,multithreading,serial-port,Multithreading,Serial Port,下面是我的场景:我需要在多个线程中读取和写入同一个串行端口。我没有在每个线程中创建一个SerialPort(这会导致“拒绝访问”错误),而是使用某种全局缓存来完成这项工作。对于每个串行端口,我只保留一个SerialPort对象 private static object locker = new object(); internal static Dictionary<int, SerialPort> SerialPorts = new Dictionary<int, Seri
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方法安全吗
'让多个线程调用ReadByte或ReadByte安全吗
同时编写方法?”
是的,这很好,只要一次只有一个线程读取,一个线程写入
如果您在串行字节流之上有任何协议,您可能会遇到问题,但您的问题并不清楚。如果编写命令的线程也需要得到响应,您将需要一个互斥体。通常情况就是这样。这当然是一个相当严重的并发危害。在这种情况下,为什么我需要互斥呢?我的场景不是每个线程都有一个线程进行读取和写入,而是让多个线程执行此操作。只是对SerialPort变量的访问是同步的。