Если процесс / поток может работать с отключенными прерываниями, то этот процесс / поток может предотвратить прерывание операционной системы операционной системой и, следовательно, может загружать все процессорное время, и поэтому может быть неудержимым злонамеренным отказомсервисная атака.
Для некоторых процессоров при некоторых условиях (например, 80x86 с IOPL, установленным в 3) ОС может разрешить процессу / потоку отключить прерывания IRQ, и можно запустить процесс / потокс отключенными IRQ, но без возможности включать / отключать IRQ (например, отключать IRQ в ядре непосредственно перед возвратом в пространство пользователя);но из-за проблем с безопасностью очень немногие операционные системы могут это допустить.
Однако;Семафоры также включают взаимодействие с планировщиком (блокирование задачи до тех пор, пока она не может получить семафор, и разблокирование задачи, когда она может получить семафор), и планировщик (его очереди «готов к выполнению», состояния процессов / потоков и т. д.) ивозможность доступа к полному состоянию процесса / потока (например, специальные регистры «только для ядра», например, какой регистр управляет тем, какое виртуальное адресное пространство выбрано в настоящее время) также обычно доступны только из кода ядра (и не разрешены для доступа из пространства пользователя(процессом / потоком).
Другими словами;разумно (игнорируя причудливые и маловероятные случаи) предположить, что более 50% кода в вашей функции wait()
не может быть реализовано в пространстве пользователя и должно быть реализовано в ядре;и поэтому разумно предположить, что ваша функция wait()
предназначена для реализации в ядре (и не предназначена для реализации в пользовательском пространстве процессом или потоком) .