• 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 一样. 这个行为很少是一个问题; 然而, 如果有 足够的锁竞争来引起饥饿, 性能无论如何都不行.

  • 相关阅读:
    winform,WPF 释放内存垃圾,减少资源占用方法
    Winform中使用WPF控件并动态读取Xaml
    Winform程序双向绑定
    STM32L15XXX 入门笔记
    STM32固件库下载地址
    C#实现虚拟控件列表显示100w个控件方法
    DotNetBar滚动条的疑似BUG
    VS Sln图标空白修复办法
    Swift下使用Xib设计界面
    关于Mac OS虚拟机下共享文件夹的方法
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11141752.html
Copyright © 2020-2023  润新知