StateMachine на Windows WorkFlow поток безопасен? - PullRequest
0 голосов
/ 07 августа 2009

Я планирую использовать State Machine WorkFlow рабочих процессов Windows.

Конечный автомат будет получать события из двух отдельных потоков, конечный автомат, разумеется, будет изменять свое состояние и выполнять действия в зависимости от текущего состояния и наступившего события.

Мой вопрос таков: безопасен ли конечный автомат потока рабочих процессов Windows, а это означает, что он гарантирует правильное изменение состояния, когда два потока обращаются к нему одновременно?

Ответы [ 2 ]

4 голосов
/ 25 августа 2009

Выполнение рабочего процесса следует однопоточным соглашениям о квартире, то есть один конкретный экземпляр рабочего процесса может выполняться только одним потоком за раз в течение любой среды выполнения. Это по замыслу.

Среда выполнения рабочего процесса использует внутреннюю очередь планирования для выполнения операций для экземпляров рабочего процесса, поэтому два потока, вызывающих операции с одним экземпляром рабочего процесса, будут сначала сериализованы в очередь планировщика, а затем последовательно вызваны новым потоком, запланированным средой выполнения. (планирование по умолчанию) или потоком, переданным контекстом вызова для каждой операции (планирование вручную).

При использовании службы персистентности среда выполнения рабочего процесса также обеспечивает синхронизацию версии базы данных - другая среда выполнения рабочего процесса, запущенная на другом процессе / компьютере, не может загрузить тот же экземпляр рабочего процесса из персистентности, если он в данный момент открыт другой средой выполнения рабочего процесса.

Это означает, что вам не нужно беспокоиться о безопасности потоков при выполнении кода в модели рабочего процесса (например, вам не нужно блокировать установщики свойств), и вам не нужно беспокоиться об условиях гонки. .

1 голос
/ 07 августа 2009

Как вы интерпретируете подобные вещи в документации Microsoft для (например) CLASS активности состояний в System.Workflow.Activitie:

Резьба безопасности Любая общедоступная статика (Shared в Visual Основные) члены этого типа являются потоками безопасный. Любые члены экземпляра не являются гарантированно безопасен для потоков.

Подобные отрывки даны на многих соответствующих классах. Мой вывод «нет» и не безопасен для использования в ваших целях.

...