【问题标题】:Atomicity guaranteed on "lock" methods in Linux?Linux中的“锁定”方法保证原子性?
【发布时间】:2014-12-23 12:39:16
【问题描述】:

我们知道,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();

【问题讨论】:

    标签: linux-kernel mutex semaphore atomic


    【解决方案1】:

    信号量,读写器信号量会自动禁用 SMP 系统中的内核抢占。

    【讨论】:

      【解决方案2】:

      如果这些函数相对于锁本身不是原子的,它们就根本无法工作。上次我查看时,我的 Linux 确实可以工作。

      这些函数中的大多数确实在执行它们的工作时禁用了抢占。

      【讨论】:

      • 这是我希望看到的。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多