Общая библиотека, используемая двумя процессами - PullRequest
1 голос
/ 17 августа 2011

Кто-то задал мне этот вопрос:

Два процесса P1 и P2 используют общую библиотеку (система UNIX).Общая библиотека имеет глобальную переменную G1 и функции getval () и setval (), которые получают и устанавливают значение G1.

Вот последовательность событий:

P1:Calls setval(10)  P1:Goes to sleep P2: Calls setval(20) P2:Goes to sleep P1:awake from sleep P1: Calls val=getval( )

Теперь, каково будет значение val?Какой P1 получает?Это 10 или 20?

Какой будет ваш ответ с объяснением.Возможные варианты:

  1. val = 10, потому что каждый процесс выполняется и имеет свое собственное адресное пространство, хотя несколько процессов используют одну и ту же общую библиотеку.Таким образом, хотя G1 является глобальной переменной, ее значение будет уникальным для каждого процесса.

  2. P1.получает значение 20, так как значение было изменено процессом P2, когда P1 спал.

  3. Значение не может быть определено.

  4. ВыВы можете добавить любой другой ответ, если хотите, кроме этих 4 вариантов.

Ну, 1. был мой ответ.Вы согласны?

P1 и P2 не взаимодействуют и являются независимыми процессами

1 Ответ

3 голосов
/ 17 августа 2011

10 = вал.Действительно, каждый процесс и имеет свое (не это, «это» есть «это») собственное адресное пространство.В библиотеке нет места для данных.

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