linux 同步机制之完成量

一、概述

完成量complete是一种同步机制,可以协调多个进程间执行顺序。如果当前进程无法获得完成量,那么当前进程会被调度到等待队列中睡眠,待完成量持有者释放后或者异常信号发生时,睡眠的进程会唤醒继续执行。

二、数据结构

<include/linux/completion.h>

/* done: 完成量计数
 *       初始化时被置0,此时获取者(进程)会被调度到等待队列上睡眠
 *       持有者释放后,被加1
 *       获取者获取后,被减1
 * wait:等待队列头,管理在等待队列上睡眠的进程
 */
struct completion {
    unsigned int done;
    wait_queue_head_t wait;
};

三、操作函数

1. 初始化

<include/linux/completion.h>

/* x: 完成量地址
 */
void init_completion(struct completion *x)
{
    x->done = 0;    //初始化完成量计数为0
    init_waitqueue_wait(&x->wait);    //初始化等待队列头
}

/* x: 完成量地址
 */
void reinit_completion(struct completion *x)
{
    x->done = 0;    //重置完成量计数为0
}

2. 获取完成量

<kernel/sched/completion.c>

/* 尝试获取完成量,如果计数done为0,获取者会被调度到等待队列上睡眠,该睡眠不会被打断;否则会对计数done减1操作,进程继续执行
 * x: 完成量
 */
void wait_for_comp

猜你喜欢

转载自blog.csdn.net/u010704053/article/details/105138044
今日推荐