make: Windows Jobserver

 
 13.1.2 Windows Jobserver Interaction
 ------------------------------------
 
 On Windows systems the jobserver is implemented as a named semaphore.
 The semaphore will be set with an initial count equal to the number of
 available slots; to obtain a slot you must wait on the semaphore (with
 or without a timeout).  To release a slot, release the semaphore.
 
    To access the semaphore you must parse the 'MAKEFLAGS' variable and
 look for the argument string '--jobserver-auth=NAME' where 'NAME' is the
 name of the named semaphore.  Use this name with 'OpenSemaphore' to
 create a handle to the semaphore.
 
    There are various error conditions you must consider to ensure your
 implementation is robust:
 
    * Usually you will have a command-line argument controlling the
      parallel operation of your tool.  Consider whether your tool should
      detect situations where both the jobserver and the command-line
      argument are specified, and how it should react.
 
    * Your tool should be sure to release the semaphore for the tokens it
      read, even under error conditions.  This includes not only errors
      in your tool but also outside influences such as interrupts
      ('SIGINT'), etc.  You may want to install signal handlers to manage
      this write-back.