Мы знаем, что следующие методы ядра в 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();
Это то, что я хотел видеть в письменной форме. :) –