Linux设备驱动程序学习笔记之信号量和互斥体
来源:互联网 发布:软件视频会议系统方案 编辑:程序博客网 时间:2024/06/07 01:25
void down(struct semaphore*sem);/*不推荐使用,会建立不可杀进程*/
int down_interruptible(struct semaphore*sem);/*推荐使用,使用down_interruptible需要格外小心,若操作被中断,该函数会返回非零值,而调用这不会拥有该信号量。对down_interruptible的正确使用需要始终检查返回值,并做出相应的响应。*/
int down_trylock(struct semaphore*sem);/*带有“_trylock”的永不休眠,若信号量在调用是不可获得,会返回非零值。*/
void up(struct semaphore*sem);/*任何拿到信号量的线程都必须通过一次(只有一次)对up的调用而释放该信号量。在出错时,要特别小心;若在拥有一个信号量时发生错误,必须在将错误状态返回前释放信号量。*/
/* Initialize each device. */
for (i = 0; i < scull_nr_devs; i++) {
scull_devices[i].quantum = scull_quantum;
scull_devices[i].qset = scull_qset;
init_MUTEX(&scull_devices[i].sem);/* 注意顺序:先初始化好互斥信号量 ,再使scull_devices可用。*/
scull_setup_cdev(&scull_devices[i], i);
}
completion
completion是一种轻量级的机制,它允许一个线程告诉另一个线程某个工作已经完成。代码必须包含<linux/completion.h>。使用的代码如下:
DECLARE_COMPLETION(my_completion);/* 创建completion(声明+初始化) */
/////////////////////////////////////////////////////////
struct completion my_completion;/* 动态声明completion 结构体*/
static inline void init_completion(&my_completion);/*动态初始化completion*/
///////////////////////////////////////////////////////
void wait_for_completion(struct completion*c);/* 等待completion */
void complete(struct completion*c);/*唤醒一个等待completion的线程*/
void complete_all(struct completion*c);/*唤醒所有等待completion的线程*/
/*如果未使用completion_all,completion可重复使用;否则必须使用以下函数重新初始化completion*/
INIT_COMPLETION(struct completion c);/*快速重新初始化completion*/
void complete_and_exit(struct completion*c,long retval);
- Linux设备驱动程序学习笔记之信号量和互斥体
- Linux设备驱动程序学习笔记08:自旋锁和信号量
- Linux设备驱动程序 学习笔记
- Linux设备驱动程序学习笔记
- linux设备驱动程序学习笔记
- Linux设备驱动程序学习笔记
- linux设备驱动程序学习笔记
- Linux设备驱动程序学习笔记01:设备驱动程序简介
- Linux设备驱动程序学习笔记03:字符设备驱动程序I
- Linux设备驱动程序学习笔记04:字符设备驱动程序II
- Linux设备驱动程序学习笔记05:字符设备驱动程序III
- Linux设备驱动程序学习笔记06:字符设备驱动程序IV
- Linux设备驱动程序学习笔记07:字符设备驱动程序V
- 《Linux设备设备驱动程序(第三版)》学习笔记之三:sleepy设备的使用
- 《Linux设备设备驱动程序(第三版)》学习笔记之三:sleepy设备的使用
- Linux学习笔记之---信号量
- Linux设备驱动程序学习笔记1
- linux设备驱动程序学习笔记(序)
- 设计模式的原则
- 蓝屏调试--转自于博博客
- GetPrivateProfileString ,WritePrivateProfileString详解
- UDP网络编程
- cmd命令
- Linux设备驱动程序学习笔记之信号量和互斥体
- 如何偷窥平行宇宙文明
- User Agent
- OA市场格局轮廓突显 JAVA成高端用户主流选择
- 在struts中向window.open提交form信息
- create table #temptable 临时表 和 declare @bianliang table ()表变量
- 【总结备用】Android 常用权限一览
- 关于HANA简单介绍
- 面试时如何回答为何离开老东家