Взаимодействие с сервером заданий Windows
В системах Windows сервер заданий реализован в виде именованного семафора. Семафор будет установлен с начальным значением, равным количеству доступных слотов; для получения слота необходимо дождаться семафора (с таймаутом или без него). Для освобождения слота необходимо освободить семафор.
Для доступа к семафору необходимо разобрать переменную MAKEFLAGS и найти строку аргументов --jobserver-auth=NAME, где «NAME» — имя именованного семафора. Используйте это имя с OpenSemaphore, чтобы создать дескриптор семафора.
Единственный допустимый стиль для --jobserver-style — «sem».
Существуют различные условия возникновения ошибок, которые необходимо учитывать, чтобы обеспечить надежность вашей реализации:
- Обычно у вас будет аргумент командной строки, контролирующий параллельную работу вашего инструмента. Подумайте, должен ли ваш инструмент обнаруживать ситуации, когда указаны и сервер заданий, и аргумент командной строки, и как он должен на это реагировать.
- Ваш инструмент должен гарантировать освобождение семафора для полученных токенов, даже в условиях возникновения ошибок. Это включает не только ошибки в вашем инструменте, но и внешние влияния, такие как прерывания (
SIGINT) и т. д. Возможно, вам потребуется установить обработчики сигналов для управления этим возвратом.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Windows-Jobserver.html