{{ transformations:ExclusiveAccessAction.png}}
======START/FINISH EXCLUSIVE ACCESS======
Category: Workflow / Internal \\
\\
=====Description=====
Enforce mutually exclusive access to a resource for simultaneously executed workflows (tasks).\\
\\
=====Use cases=====
The action is intended for avoiding access conflicts when two or more simultaneously executed workflows (tasks) attempt to access a resource (e.g. write into a file or web API) that can only be accessed by one workflow at a time. It's typically used to resolve access conflicts between several simultaneously executed instances of an EasyMorph Server task.
\\
=====Action settings=====
^Setting^Description^
|Mode|Select whether the action will start or stop exclusive access. Options: //Enforce exclusive access// or //Stop\\ enforcing access//. |
|Resource name*|Enter a name for the resource. The resource name is symbolic. It is only used to identify a resource for the action.\\ The name doesn't have to be the real name of the accessed resource. Although, it is recommended to give\\ resources meaningful identifiers for clarity.|
* Setting can be specified using a [[:parameters|parameter]].\\
\\
=====Remarks=====
The action works similarly to a railroad semaphore. When one workflow starts exclusive access to a resource using the action, all the other workflows running on the same computer and requiring access to the same resource will wait until the first workflow finishes the exclusive access. Once exclusive access is finished, one from the waiting workflows will proceed to access the same resource.
{{ :transformations:exclusive-access.png?nolink |}}
For the access synchronization to work, all the workflows that access the resource must use the "Start/finish exclusive access" with the same resource name. If a workflow doesn't use the action, it won't wait for another workflow even if the latter uses the action.
To finish exclusive access to a resource, use the action again but in the "Finish" mode. Make sure that the specified resource name is the same for starting and finishing exclusive access.
To make the synchronization work, all workflows must use the "Start/finish exclusive access" action configured to start access to a resource with the same name.
A workflow can start exclusive access to only one resource at a time. In order to start exclusive access to another resource, the previous exclusive access must be finished by using the action again but in the "Finish" mode. Nested locks are not supported.
After exclusive access is established, it must be finished as soon it's no longer needed. Therefore, when exclusive access is required in a workflow, two "Start/finish exclusive access" actions should be used: one in the "Start" mode before accessing the resource, and another in the "Finish" mode immediately after the resource is no longer used or interacted with.
If exclusive access is not finished explicitly, it will be finished automatically when workflow execution finishes. In such a case, a warning will be produced.
In a workflow, exclusive access to only one resource at a time can be established. Locking access to two resources simultaneously is prohibited as well as nested locks.
The action can't be used to synchronize actions within the same workflow. For that, use the [[transformations:synchronize|Synchronize]] action.
The action can't be used to resolve access conflicts for workflows running on different computers.
\\
=====See also=====
* [[transformations:synchronize|Synchronize]]
* [[transformations:wait|Wait]]