Должен ли я ставить в очередь соединение Nmodbus4 RTU с помощью мьютекса?

#c# #mutex #modbus

#c# #мьютекс #modbus

Вопрос:

Я использую библиотеку NModbus4 и создаю RTU-соединение.

 public static IModbusSerialMaster Master { get; set; }
Master = ModbusSerialMaster.CreateRtu(SerialPort);
  

У меня есть метод, GetClient() который возвращает Master , и метод Registers() , который выглядит как:

     public static ushort[] Registers(Func<IModbusSerialMaster, ushort[]> action)
    {
        ushort[] registers = new ushort[0];
        var client = GetClient();
        if (client == null)
            return registers;
        //mutex.WaitOne();
        try
        {                
            registers = action.Invoke(client);
        }
        catch (Exception e)
        {
            log.Error("error");
        }
        finally
        {
            //mutex.ReleaseMutex();
        }
        return registers;
    }
  

Я пытался использовать System.Threading.Mutex , чтобы быть уверенным, что только один метод будет отправлять кадры одновременно. Но примерно через минуту, когда в цикле выполняются 2/3 задачи, он блокируется mutex.WaitOne(); и останавливает программу.

Если я не использую мьютекс. Я не вижу никаких ошибок. Гарантирует ли сам NModbus, что программа не завершится сбоем таким образом? Или я должен выяснить, почему это происходит, оставить мьютекс и исправить ошибку?

Комментарии:

1. Вы должны использовать синхронизацию, только если метод может быть вызван более чем одним потоком одновременно.