Yuhang Zheng
新世界的拓荒

想了很久终于要写下文字,在这么一个全新的地方,是最开放也是最私密的小世界里。在偌大的无法想象的互联网上的一个最不为人所知的小角落里。

之前看了很多大佬的搭建的个人博客,很温馨,很精致,很羡慕。在一个属于自己的地方记录着生活,分享着知识和成长,和志同道合的小伙伴们一起创造着属于他们一起的回忆。

大概是他们是很认真很专注的那种人吧,主动拥抱着热爱的生活,为了兴趣愿意付出时间并且欣然去努力。能够致力于长期的投入等待未来的回报,能够乐在其中过程而不是迷失在对结果的渴求中,这些品质就是现在的自己很想很想要的吧。

也不必在这里反思自己的状态,不必过分去内疚曾经的自己,真正重要的还是要去决心改变这一切令你不满意的现状,让曾经的过去,让未来的到来。

希望从现在开始,有一个新的启程吧,认真去对待这个地方,认真记录和分享。只有变成更好的人,才能遇到更好的人,才能与那些现在自己眼中的大佬站在同样的水平上侃侃而谈。

愿改变,从此刻开始。

完成量(转载)

在驱动程序开发中,一种常见的情况是:一个线程需要等待另一个线程执行完某个操作后,才能继续执行。这个工作其实信号量也可以完成,但其效率比Linux中专门针对这种情况的完成量机制要差些。

一、完成量概述

Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某个事件已经发生,可以在此事件基础上做你想做的另一个事件了。

二、定义

完成量由struct completion结构体表示
定义于#include<linux/complete.h>

struct completion {
unsigned int done;
wait_queue_head_t wait;
};

done 成员
done成员用来维护一个计数。当初始化一个完成量时,done成员被初始化为0。由done的类型可以知道这是一个无符号类型,其值永远大于等于0.当done等于0时,会将拥有完成量的线程置于等待状态;当done的值大于0时,表示等待完成量的函数可以立刻执行,而不需要等待。

wait成员
wait是一个等待队列的链表头,这个链表将所有等待该完成量的进程组成一个链表结构。在这个链表中,存放了正在睡眠的进程链表。