Multithreading 是否需要将读写操作同步到同一个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

下面是我的场景:我需要在多个线程中读取和写入同一个串行端口。我没有在每个线程中创建一个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方法安全吗

'让多个线程调用ReadByte或ReadByte安全吗 同时编写方法?”

是的,这很好,只要一次只有一个线程读取,一个线程写入


如果您在串行字节流之上有任何协议,您可能会遇到问题,但您的问题并不清楚。

如果编写命令的线程也需要得到响应,您将需要一个互斥体。通常情况就是这样。这当然是一个相当严重的并发危害。在这种情况下,为什么我需要互斥呢?我的场景不是每个线程都有一个线程进行读取和写入,而是让多个线程执行此操作。只是对SerialPort变量的访问是同步的。