В настоящее время у меня есть несколько ресурсов в проекте, которые могут быть доступны только из одного потока.Одним из примеров является сервер ZeroMQ, а другим - коммуникационный модуль ПЛК Mitsubishi, который не является потокобезопасным.
Сейчас я создаю отдельный поток для любого ресурса, требующего однопоточного доступа.Я не обернул это в класс или что-то еще, поэтому у меня есть метод ThreadStart
(void) и пара свойств в каждом классе, требующих согласованного доступа к ресурсу.Затем я использую диспетчер в сочетании с Invoke
/ BeginInvoke
для принудительного доступа только из отдельного потока.
Есть ли уже доступный класс, который может координировать доступ к ресурсу из одного потока?
Вот пример кода, который прямо сейчас даст мне Диспетчер:
object theLock = new object();
Dispatcher dispatcher = null;
lock (theLock)
{
new Thread(new ThreadStart(() =>
{
lock (theLock)
{
dispatcher = Dispatcher.CurrentDispatcher;
Monitor.Pulse(theLock);
}
Dispatcher.Run();
})).Start();
Monitor.Wait(theLock);
}
dispatcher.Invoke(...);
Я могу обернуть этот код в класс, просто чтобы создать поток и диспетчер, когда мне это понадобится., но я не могу представить, что это лучшее решение для координации доступа к ресурсо-небезопасному ресурсу.