Использование макроса for_each_process в ядре Linux - PullRequest
2 голосов
/ 18 декабря 2011

Я хочу перебрать каждый процесс в ядре и изменить некоторые параметры в task_struct. Я думаю, что могу использовать макрос for_each_process() для этого.

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

Как мне достичь этих двух целей?

1 Ответ

0 голосов
/ 21 декабря 2011

Вы можете использовать:

int flags;  
smp_wmb(); 
raw_spin_lock_irqsave(&task->pi_lock, flags);
do your stuff
raw_spin_unlock_irqrestore(&task->pi_lock, flags);

, чтобы заблокировать задачу, которую вы сейчас обрабатываете.

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