2012-03-01 3 views
1

Глядя на workqueue.c, кажется, что только части, которые заблокированы должным образом, находятся между публично открытыми API и внутренним потоком, который выполняется. Кажется, что есть некоторые вещи за пределами критического раздела (что для моего неподготовленного глаза), что может быть небезопасным?Безопасна ли рабочая_точка?

Правильно ли я или от основания?

+1

Не могли бы вы быть более конкретными? – pmdj

+1

В ядре нет критических разделов. Существуют только семафоры, спин-блокировки, вариант чтения-записи обоих, доработки, irqsave, атомные операции, барьеры памяти, тщательная упорядоченность и структуры данных каждого процессора. Каждый из них имеет точно определенный набор случаев, в которых он решает и точно определяет набор контекстов, где он может быть использован, поэтому даже невозможно использовать одну вещь для блокировки всего. –

ответ

2

Предполагаю, что вы говорите о workqueue.c в ядре Linux? http://lxr.linux.no/#linux+v3.2.9/kernel/workqueue.c

В этом случае используйте только открытый API, предположим, что он является потокобезопасным и сообщает о любых проблемах, которые вы видите в Ingo Molnar. Обратите внимание, что большинство разработчиков ядра серьезно сообразительны и не будут повторно повторять ошибку «большой блокировки»: не все выполняется под мьютексом, потому что не все должно быть. Трюки, такие как RCU (чтение копии), также уменьшают количество блокировки. И все без блокировки будет работать намного лучше.