我是否需要将读取和写入操作同步到同一个SerialPort实例?

时间:2014-10-10 13:35:21

标签: multithreading serial-port

这是我的场景:我需要在多个线程中读取和写入相同的串行端口。而不是在每个线程中创建一个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方法是否安全?

1 个答案:

答案 0 :(得分:0)

  

&#39;让多个线程调用ReadByte或者是安全的   同时写方法?&#39;

是的,只要一个线程只读一个线程,并且一个线程在任何时候写入,那就没问题了。

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