这是我的场景:我需要在多个线程中读取和写入相同的串行端口。而不是在每个线程中创建一个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方法是否安全?
答案 0 :(得分:0)
&#39;让多个线程调用ReadByte或者是安全的 同时写方法?&#39;
是的,只要一个线程只读一个线程,并且一个线程在任何时候写入,那就没问题了。
如果您在串行字节流之上有任何协议,则可能会遇到问题,但您的问题并不清楚。