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
action:Semaphore_Lock [2017/03/05 21:45]
peternlewis [Forum]
action:Semaphore_Lock [2017/05/18 20:56] (current)
JMichaelTX rewrite to add clarity and sections
Line 1: Line 1:
-The //Semaphore actions// (Lock, Unlock and Reset) allow you to limit the execution of sequence ​of 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. 
 + 
 +===== Background =====
  
 When you trigger a macro, the Keyboard Maestro Engine takes a copy of it and starts executing it.  If you trigger another macro before the first one finishes, that will start executing as well - both will be executing more or less simultaneously. When you trigger a macro, the Keyboard Maestro Engine takes a copy of it and starts executing it.  If you trigger another macro before the first one finishes, that will start executing as well - both will be executing more or less simultaneously.
  
-The normal case is that macros just all run simultaneously, ​and you rarely have multiple macros ​running ​at the same time.+==== Macros Triggered by the User ==== 
 + 
 + 
 +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 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 ====
  
-Most macros ​are executed explicitly by the user, and the user expects them to do their thing and then the user goes on to the next thingso macros ​like this will rarely run at the same time since the user is highly aware of what is going on+But there is another class of macros ​that operate in the backgroundmost especially time triggered macros. Macros that are triggered independent of the UI and the user's awareness. Typically these will be written so as not to impact ​the user since the user won't be expecting them to run. So they might be things like backup scriptsor automatic download scripts, or the like. Things that happen in the background, or that wait for the user to be idle before doing stuff in the foreground. Often these sorts of macros run for a significant amount of time.
  
-But there is another class of macros that operate in the background, most especially time triggered macros. ​Macros ​that are triggered independent of the UI and the user's awareness. Typically these will be written so as not to impact the user since the user wont be expecting them to run. So they might be things like backup scripts, or automatic download scripts, or the like. Things that happen in the background, or that wait for the user to be idle before doing stuff in the foreground. Often these sorts of macros run for a significant amount of time.+===== Preventing Multiple Executions ​of One or More Macros ​=====
  
-Occasionally there are cases where multiple macros ​are running simultaneously (or the same macro is running multiple times) and care needs to be taken that the sequences of actions are not intermixed.+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.
  
-This is a primary purpose of using a //Semaphore Lock// ​just place one at the start of the sequence.  The lock will remain in place (and any other macros that try to execute ​that action will have to wait) until the end of the macro, or until you execute a Semaphore Unlock action.+**The primary purpose of using a //Semaphore Lock// ​is to prevent simultaneous macro executions.** 
 +  * 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 completes, or until you execute a Semaphore Unlock action.
  
 The //Semaphore actions// take a name, and different names can be used for different (independent) locks. The //Semaphore actions// take a name, and different names can be used for different (independent) locks.
action/Semaphore_Lock.txt · Last modified: 2017/05/18 20:56 by JMichaelTX