linux驱动20:completion(用于同步)

本文介绍了Linux中completion机制的使用,包括初始化、等待完成和触发完成的函数。completion是一种用于线程间同步的轻量级工具,常用于一次性事件的通知。示例展示了在读写操作中如何应用completion来实现线程间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

completion是一种轻量级同步机制,允许一个线程通知另外一个线程某个工作已经完成。

头文件:<linux/completion.h>

初始化:

init_completion(struct completion *c);

等待完成:

void wait_for_completion(struct completion *c);

执行一个非中断的等待,如果代码调用了该函数且没有人调用completion,将产生一个不可杀进程。

触发完成:

void completion(struct completion *c);

void completion_all(struct completion *c);

completion唤醒一个等待线程,completion_all允许唤醒所有等待线程。

注:

一个completion通常是一个一次设备,即只会被使用一次然后丢弃。没有使用completion_all,可以重复使用一个completion结构,只要触发的事件是明确的。如果使用了completion_all,则必须在重复使用该结构之前重新初始化它。

快速初始化:INIT_COMPLETION(struct completion *c);

demo:

ssize_t completion_read(struct file *filep, char __user *buf, size_t count, lofft_t *pos) {

        wait_for_completion(&c);

        return 0;

}

ssize_t completion_write(struct file *filep, char __user *buf, size_t count, lofft_t *pos) {

        completion(&c);

        return count;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值