zoukankan      html  css  js  c++  java
  • 为了防止不同的cpu抢占同一段代码(即同一段内存地址),需要用自旋锁将这段代码锁住。

    自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU已访问完临界区,将临界区开锁。自旋锁上锁后让等待线程进行忙等待而不是睡眠阻塞,而信号量是让等待线程睡眠阻塞。自旋锁的忙等待浪费了处理器的时间,但时间通常很短,在1毫秒以下。

    自旋锁用于多个CPU系统中,在单处理器系统中,自旋锁不起锁的作用,只是禁止或启用内核抢占。在自旋锁忙等待期间,内核抢占机制还是有效的,等待自旋锁释放的线程可能被更高优先级的线程抢占CPU。 

    自旋锁使用方法如下:

    spinlock_t my_lock

    void spin_lock_init(spinlock_t *lock);

    void spin_lock(spinlock_t *lock);

    //code here

    void spin_unlock(spinlock_t *lock);

    持有自旋锁的代码在任何情况下都不能放弃CPU,否则很可能引起系统死锁,因此若这段代码有可能切换应用,则不能使用自旋锁,而必须使用互斥锁。

    互斥锁使用方法如下:

    static struct mutex toggle_mutex;

    mutex_init(&toggle_mutex);

    mutex_lock(&toggle_mutex);

    //code here

    mutex_unlock(&toggle_mutex);

    另外,结构体变量在声明时被分配内存空间,这点与int、long等变量不同。

  • 相关阅读:
    结构体字节对齐
    ORACLE自增长字段实现
    Oracle 11.2.0.2新特性——用户重命名(Rename User)
    oracle expdp/impdp 用法详解
    sql语句面试题(城市人口统计) .
    ORA30553: 函数不确定!
    SQL Express自动备份 .
    SQL 2005的DES加密算法
    SQL 2005加密数据方法
    CREATE VIEW ORA01031
  • 原文地址:https://www.cnblogs.com/yiru/p/2985125.html
Copyright © 2011-2022 走看看