Можно ли сделать конечный автомат без гражданства потокобезопасным с помощью внешней блокировки?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли сделать конечный автомат без гражданства потокобезопасным с помощью внешней блокировки?

Сообщение Anonymous »

Я с самого начала понял, что конечный автомат без сохранения состояния не является потокобезопасным. Но мне это не нужно, пока у меня есть способ исправить это внешне. У меня сложилось впечатление, что если просто поставить внешнюю блокировку на каждый вызов функции StateMachine.Fire, эту проблему можно решить.

Код: Выделить всё

lock(_lock)
MyMachine.Fire(Trigger.DoSomething);
Наше приложение использует его таким образом и работает очень хорошо, но иногда (редко) мне сообщают об ошибках, которые выглядят (в моих журналах) как изменение состояния, которое не должно быть возможным, учитывая триггеры, которые я запустил. И, похоже, это происходит в основном на более медленных машинах, поэтому это похоже на состояние гонки.
Но я не могу воспроизвести это сам, поэтому не могу определить, связана ли проблема с чем-то другим. ошибка многопоточности в моей логике или из-за того, что этот подход в корне неадекватен.
Я посмотрел логику организации очередей в исходном коде и кажется, что внешняя блокировка должна работать .
Нужен ли здесь новый подход?

Подробнее здесь: https://stackoverflow.com/questions/787 ... al-locking
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»