Может тогда типа как в сетях используется CSMA/CD?
1. Зашли в функцию, сразу поставили флаг.
2. Просмотрели флаги, если никого нет - инкремент, сброс флага, выход.
Если есть кто-то ещё:
3. Сбросить свой флаг.
4. Выждать некий случайный интервал.
5. Начать заново с пункта 1.
Если кто-то уже работает - он работает до конца, остальные будут сбрасывать-устанавливать флаги.
Если вдруг флаг выставят несколько ядер с точностью до такта - они их сбросят и разбегутся во времени за счёт случайных интервалов.
Интервал можно выбрать один раз, потом удваивать - разбегутся во времени вообще быстро.
Примерно так разруливает коллизии Ethernet.




Ответить с цитированием
