Разве блокирующие операции не должны быть всегда прерываемыми?

На мой взгляд, все операции с блоком должны обеспечивать некоторый механизм для прерывания ожидания и обеспечения чистого возврата потока, как бдительное ожидание операции в Windows API. Однако, кроме Windows API, такой функции практически не видно. Я не знаю почему.

Только представьте, что может произойти, если операция с блоком не обеспечивает такой механизм. message_queue класс в Boost.Interprocess является таким примером. это send() а также receive() методы блокируют. Это означает, что процесс с заблокированным потоком не будет полностью контролировать себя. До тех пор, пока в игру не вступят какие-то внешние факторы, такой процесс не сможет даже выйти чисто, так как практически невозможно вывести заблокированный поток из состояния ожидания. Кроме того, без такой функции не существует чистого способа устранения тупика, который уже произошел и был обнаружен. Несмотря на это, я видел много операций блокировки, разработанных без такой функции. Почему это? Я что-то не так делаю?

Другой пример будет std::mutex::lock() в C ++ 11. Но так как это на весь процесс, и внешние факторы все еще находятся под контролем процесса, проблема не столь серьезна, как механизм блокировки всей машины. Но не лучше ли будет просто предоставить метод вывода средств? Я знаю о std::condition_variable, Я просто считаю, что каждая операция блокировки должна быть прерываемой, даже ценой некоторого снижения производительности.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]