Вот мой сценарий: мне нужно читать и писать на один и тот же последовательный порт в нескольких потоках. Вместо создания одного SerialPort в каждом потоке, который вызвал бы ошибку «access denied», я использую вид глобального кэша для выполнения задания. Для каждого последовательного порта я сохраняю только один объект 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? – Nico