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.