linux 互斥机制之信号量

一、概述

信号量一般可以用来标记可用资源的个数,因为其count成员为0时,才会调度当前无法获取信号量的进程去睡眠,而在初始化时可以设置为任何值。

在linux中获取互斥锁使用的是排队机制,先睡眠的进程先获取锁。

二、相关文件

<include/linux/semaphore.h>

三、数据结构

/* 内核中信号量结构 */
struct semaphore {
    /* 自旋锁 */
    spinlock_t lock;

    /* 计数,初始化时可设置为任何值;为0时,当前进程不可获取信号量,会调度当前进程去睡眠。非0时,当前进程可以获取信号量,并将其减1操作。在持有者释放时,对其加1操作。 */
    unsigned int count;

    /* 链表头,管理睡眠的进程。先睡眠的进程,会先唤醒。 */
    struct list_head wait_list;
};

四、重要函数

/* 定义信号量 */
struct semaphore ***_sema;

/* 初始化信号量 */
voud sema_init(struct semaphore *, int);

/* 上锁 */
void down(struct semaphore *)

/* 解锁 */
void up(struct semaphore *);

五、其它

发布了15 篇原创文章 · 获赞 0 · 访问量 202

猜你喜欢

转载自blog.csdn.net/u010704053/article/details/105366549