#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. Вы должны использовать синхронизацию, только если метод может быть вызван более чем одним потоком одновременно.