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 [2017/05/18 20:56]
JMichaelTX rewrite to add clarity and sections
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.** +**The //​Semaphore ​actions// require a _Semaphore Name_, which uniquely identify each _Semaphore Lock_.** ​ Use a different _Semaphore Name_ to identify different (independent) _Semaphore Locks_. 
-  * To do this, just place a //Semaphore Lock// Action ​with 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.+**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 Nameas the first action of each Macro that you wish to prevent executing simultaneously. 
 +  * 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. 
 +  * 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.1495155418.txt.gz · Last modified: 2017/05/18 20:56 by JMichaelTX