User Tools

Site Tools


action:Semaphore_Lock

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
action:Semaphore_Lock [2019/08/24 20:43]
JMichaelTX [Preventing Multiple Executions of One or More Macros]
action:Semaphore_Lock [2022/10/30 21:42] (current)
peternlewis [Macros Triggered by the User]
Line 1: Line 1:
 ====== Semaphore Actions ====== ====== Semaphore Actions ======
  
-The //Semaphore actions// (Lock, Unlock and Reset) allow you prevent (a) multiple triggers of the same macro from executing simultaneously,​ and/or (b) multiple macros from executing simultaneously.+The //Semaphore actions// (Lock, Unlock and Reset) allow you to prevent (a) multiple triggers of the same macro from executing simultaneously,​ and/or (b) multiple macros from executing simultaneously.
  
 ===== Background ===== ===== Background =====
Line 9: Line 9:
 ==== Macros Triggered by the User ==== ==== Macros Triggered by the User ====
  
 +Although it is rare to have multiple macros triggered at the same time, the normal behaviour in Keyboard Maestro is that all triggered macros run simultaneously,​ with actions from each independently triggered macro running at the same time.
  
-The normal case is that all triggered macros run simultaneously (or synchronously),​ although you rarely have multiple macros triggered at the same time. +Most macros are triggered explicitly ​manually, and typically ​the user waits for them to complete before ​they trigger ​another macro. So macros triggered like this will rarely run at the same time.
- +
-Most macros are triggered explicitly ​by the user, and the user expects ​them to complete before ​he/she triggers ​another macro. So macros triggered like this will rarely run at the same time.+
  
 ==== Macros Triggered in the Background ==== ==== Macros Triggered in the Background ====
Line 22: Line 21:
 Occasionally there are cases where multiple macros can be triggered, or the same macro triggered again, before the other macros complete. This can sometimes cause a problem, which needs to be prevented. Occasionally there are cases where multiple macros can be triggered, or the same macro triggered again, before the other macros complete. This can sometimes cause a problem, which needs to be prevented.
  
-**The primary purpose of using a //​Semaphore ​Lock// is to prevent simultaneous ​macro executions of the same, or related, macros.**\\ +**The //​Semaphore ​actions// require a _Semaphore Name_, which uniquely identify each _Semaphore Lock_.** ​ Use a different _Semaphore Name_ to identify different (independent) _Semaphore Locks_. 
-In order to achieve this:+ 
 +**In order to prevent simultaneous executions ​(instances) ​of one or more macros that have _Semaphore Locks_ with the same _Semaphore Name_do the following:**\\ 
   * Place a //Semaphore Lock// Action (using the same Semaphore Name) as the first action of each Macro that you wish to prevent executing simultaneously.   * Place a //Semaphore Lock// Action (using the same Semaphore Name) as the first action of each Macro that you wish to prevent executing simultaneously.
-  * The lock will remain in place preventing ​any other macros ​that try to execute ​until the first macro completesor until you execute ​a Semaphore Unlock action. +  * The lock will remain in placepreventing ​the other macros ​from executing, ​until the current ​macro instance (("​macro instances"​ refers to both additional instances of the same macro _and_ instances of other macros that use the same named Semaphore Lock Action.)) ​completes or until the semaphore is unlocked with a Semaphore Unlock action
-  * You can also cause all additional macro instances to be immediately cancelled by setting a very short timeout (1 hundredth of a second) for the Semaphore Action.+  * When the Semaphore is _unlocked_ the next macro instance in the queue will execute in First In First Out (FIFO) order. ​ Since the first Action is a _Semaphore Lock_, only one macro instance is executed at a time
 +  * You can also cause all additional macro instances ​ to be immediately cancelled by setting a very short timeout (1 hundredth of a second) for the Semaphore ​Lock Action. ​ When the Semaphore Local Action times out, it cancels the pending execution of that macro instance. 
  
-The //Semaphore actions// take a name, and different names can be used for different (independent) locks. 
  
 Semaphore Lock can be balanced by a Semaphore Unlock, but a Semaphore is implicitly unlocked when the macro that locked it completes. Semaphore Lock can be balanced by a Semaphore Unlock, but a Semaphore is implicitly unlocked when the macro that locked it completes.
action/Semaphore_Lock.1566693802.txt.gz · Last modified: 2019/08/24 20:43 by JMichaelTX