2014-10-28 4 views
4

Мы знаем, что следующие методы ядра в Linux позволяют нам применять различные механизмы блокировки для общих данных. Но действительно ли Linux гарантирует атомарность самих методов? За исключением методов, связанных с нормальными и прямыми записями считывателя-писателя, которые не могут спать, не было бы катастрофическим, если бы поток выполнения был выгружен, пока он частично выполнил какие-либо другие методы, упомянутые ниже?Атомность гарантирована на методах «блокировки» в Linux?

Спин Методы блокировки

spin_lock(); 
spin_lock_irq(); 
spin_lock_irqsave(); 
spin_unlock(); 
spin_unlock_irq(); 
spin_unlock_irqrestore(); 
spin_lock_init(); 
spin_trylock(); 
spin_is_locked(); 

чтения-Writer Спин Методы блокировки

read_lock(); 
read_lock_irq(); 
read_lock_irqsave(); 
read_unlock(); 
read_unlock_irq(); 
read_unlock_ irqrestore(); 
write_lock(); 
write_lock_irq(); 
write_lock_irqsave(); 
write_unlock(); 
write_unlock_irq(); 
write_unlock_irqrestore(); 
write_trylock(); 
rwlock_init(); 

Семафор Методы

sema_init(); 
init_MUTEX(); 
init_MUTEX_LOCKED(); 
down_interruptible(); 
down(); 
down_trylock(); 
up(); 

чтения-Writer Метода Семафора

init_rwsem(); 
down_read(); 
up_read(); 
down_write(); 
up_write(); 
down_read_trylock(); 
down_write_trylock(); 
downgrade_write(); 

мьютекс Метода

mutex_lock(); 
mutex_unlock(); 
mutex_trylock(); 
mutex_is_locked(); 

Завершение переменной Метода

init_completion(); 
wait_for_completion(); 
complete(); 

ответ

3

Если эти функции не были атомными относительно сам замок , они не будут работать вообще. И в прошлый раз, когда я смотрел, моя Linux работала.

Большинство из этих функций действительно отключают предварительное использование при выполнении своих действий.

+0

Это то, что я хотел видеть в письменной форме. :) –

0

Семафор, семафоры для чтения-записи автоматически отключат использование ядра в системах SMP.

Смежные вопросы