zoukankan      html  css  js  c++  java
  • linux 读者/写者自旋锁

    内核提供了一个自旋锁的读者/写者形式, 直接模仿我们在本章前面见到的读者/写者旗标. 这些锁允许任何数目的读者同时进入临界区, 但是写者必须是排他的存取. 读者写者锁有 一个类型 rwlock_t, 在 <linux/spinlokc.h> 中定义. 它们可以以 2 种方式被声明和被 初始化:

    rwlock_t my_rwlock = RW_LOCK_UNLOCKED; /* Static way */ rwlock_t my_rwlock;

    rwlock_init(&my_rwlock); /* Dynamic way */

    可用函数的列表现在应当看来相当类似. 对于读者, 下列函数是可用的: void read_lock(rwlock_t *lock);

    void read_lock_irqsave(rwlock_t *lock, unsigned long flags); void read_lock_irq(rwlock_t *lock);

    void read_lock_bh(rwlock_t *lock);

    void read_unlock(rwlock_t *lock);

    void read_unlock_irqrestore(rwlock_t *lock, unsigned long flags); void read_unlock_irq(rwlock_t *lock);

    void read_unlock_bh(rwlock_t *lock);

    有趣地, 没有 read_trylock. 对于写存取的函数是类似的: void write_lock(rwlock_t *lock);

    void write_lock_irqsave(rwlock_t *lock, unsigned long flags); void write_lock_irq(rwlock_t *lock);

    void write_lock_bh(rwlock_t *lock);

    int write_trylock(rwlock_t *lock);

    void write_unlock(rwlock_t *lock);

    void write_unlock_irqrestore(rwlock_t *lock, unsigned long flags); void write_unlock_irq(rwlock_t *lock);

    void write_unlock_bh(rwlock_t *lock);

    读者/写者锁能够饿坏读者, 就像 rwsem 一样. 这个行为很少是一个问题; 然而, 如果有 足够的锁竞争来引起饥饿, 性能无论如何都不行.

  • 相关阅读:
    java数组基础
    java异常处理机制
    java面向对象基础(四):抽象类和接口
    java面向对象基础(二)
    java类路径classpath和包
    java面向对象基础(一)
    Tomcat(二):tomcat配置文件server.xml详解和部署简介
    java集合框架(Collections Framework)
    java基础数据类型包装类
    String、StringBuilder和StringBuffer类
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11141752.html
Copyright © 2011-2022 走看看