В Linux потоки прерывают друг друга? [закрыто]

Чтобы показать проблему, которую вы получаете, будет достаточно небольшого теста:

По отдельности это работает нормально:

ls; pwd

затем мы делаем это

cmd='ls ; pwd'

Теперь $ cmd выдаст ошибку, файлы с именами ';' и 'pwd' отсутствуют.

Именно здесь появляется команда "eval", когда вы хотите дать оболочке еще одну попытку:

eval "$cmd"

выполняется успешно, как если бы вы указали ее в командной строке.

Поэтому вместо $ trans_oracle дайте ему следующий вид: eval "$ trans_oracle"

1
26.12.2018, 23:13
1 ответ

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

Но эти прерывания невидимы для процессов пользовательского пространства и не влияют на них.

За исключением редких, обычно встроенных сценариев, ни один Linux не работает без обработки прерываний.

Что может вызвать состояние гонки, так это переключение контекста, т. е. если ядро ​​отбирает ЦП у процесса и передает его другому. Обычно это происходит по прерыванию от таймера. Если работает только один процесс, или если весь планировщик каким-то образом отключен (может быть, это возможно в какой-то встроенной среде, но очень нетипично ), то этого не происходит, и у вас один -система процессов а-ля DOS. Это правда, что невозможно состояние гонки, потому что нет многозадачности.

В многопроцессорной -системе, если одновременно активны несколько ЦП, также может возникнуть состояние гонки, поскольку несколько потоков могут выполняться одновременно, даже если планировщик не активен. Обратите внимание, что этот сценарий также чужд Linux (или любой не встраиваемой ОС ).


Второе предложение,"потоки не прерывают друг друга" в основном верно. Потоки — это, по сути, процессы, использующие одно и то же адресное пространство. Несколько потоков обычно не прерывают друг друга. Возможно, они могли бы посылать сигналы друг другу, но не более того. Это утверждение не зависит от предыдущего.

1
27.01.2020, 23:31

Теги

Похожие вопросы