Если A собирается немедленно снять блокировку, но продолжать использовать любой ресурс, который вы хотите заблокировать, то зачем вам вообще начинать блокировку?
Вы сказали: -Множество А могут работать одновременно. -Одновременно может работать только один Б
Я предполагаю (но поправьте меня, если я ошибаюсь): -В и А не могутзапустить в то же время
Если вы немедленно снимите блокировку с A, то это позволит B работать одновременно.Я что-то здесь упускаю?
Решение:
Есть механизм, который получает ресурсы для потоков.Этот механизм устанавливает блокировку ресурса только один раз, когда запускается первый поток A, и освобождает его только после того, как все потоки A ушли.
Иметь токен отмены для потоков A, который будет установлен в значение true, когдапоток B начинается, затем, когда все потоки A вышли из потока B, он может начинаться.
Поток B, очевидно, блокируется и не освобождается, пока не завершится.
Не забудьте проверитьтокен отмены достаточно часто в потоке A, поэтому при его запросе не требуется много времени для выхода.