我们知道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();
读者 - 作家旋转锁定方法
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();
读者 - 作家信号量方法
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();
答案 0 :(得分:3)
如果这些函数在锁本身方面不是原子的,那么根本就不起作用。我上次看,我的Linux确实有效。
这些功能中的大多数确实会在执行任务时禁用抢占。
答案 1 :(得分:0)
Semaphore,Reader-writer semeaphores会自动禁用SMP系统中的内核抢占。