Что означает режим блокировки? - PullRequest
0 голосов
/ 25 апреля 2019

Кажется, я не могу найти полезного определения для "блокирования" (или, если уж на то пошло, "неблокирования") при использовании по отношению к функциям POSIX C.

Например, read () может вызываться в режиме блокировки или неблокирования на канале FIFO. Если вызывается в режиме блокировки, он будет блокироваться, пока не откроется в другом месте для записи.

Будет ли эта блокировка просто завладеть потоком? Или процесс? Или это приостановит рендеринг мультивселенной?

1 Ответ

4 голосов
/ 25 апреля 2019

Блокировка означает, что поток по расписанию отключен от ЦП во время ожидания события.Когда поток выполняется по расписанию, он не потребляет циклов ЦП и позволяет другим потокам выполнять работу или переводить ЦП в состояние пониженного энергопотребления, если нет других потоков, ожидающих запуска.

Блокировка одного потокане влияет на другие темы, которые вы можете иметь в процессе.Блокирующий вызов блокирует только вызывающий поток.

Например, read блокируется, когда в канале нет данных для чтения.Когда данные поступают, они «разблокируются» и возвращается вызов read.

В ядре каждое описание файла и другие объекты, которые можно заблокировать (например, mutex или condition_variable), имеют список ожидающих потоков,Когда поток блокируется на объекте, он добавляется в список ожидания этого объекта и откладывается от процессора.Всякий раз, когда происходит событие для объекта, ядро ​​проверяет список ожидания для ожидающих потоков для такого события, и если есть какой-либо один или несколько потоков, снова планируются и вызовы блокировки в конечном итоге возвращаются.

В неблокирующем режиметакие вызовы не блокируют, а немедленно возвращают код ошибки с errno, установленным на EWOULDBLOCK или EAGAIN, которые в настоящее время являются двумя разными именами для одного и того же значения errno.(вызовы pthread не устанавливают errno, но возвращают значение ошибки напрямую).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...