Ну, что именно меняет контекст процессов. Скажем, у меня есть алгоритм, в котором говорят
S=0; begin signal(S); <critical> wait(S); end
Теперь, когда мой сигнал будет выполнен, процесс будет прерван, и процесс из очереди будет выполнен?
Я думаю, что вы хотите сделать это
S=0; begin wait(S); <critical> signal(S); end
Сначала подождите некоторый сигнал (блокировка или сигнал от другого процесса), а затем войдите в критическую секцию. И, выйдя из критической секции, подайте сигнал остальным процессам ожидания на пробуждение.