1 / 35
文档名称:

第三章 并发和竞态控制.ppt

格式:ppt   大小:884KB   页数:35页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第三章 并发和竞态控制.ppt

上传人:350678539 2022/7/3 文件大小:884 KB

下载得到文件列表

第三章 并发和竞态控制.ppt

相关文档

文档介绍

文档介绍:第三章 并发和竞态控制
第一页,共35页。
并发和竞态控制
第3章
第二页,共35页。
预****检查
防止竟态的机制有哪些?
Semaphore, spinlock, completion,原子操作 等
原子操作的em);
减小信号量的值,如果不能获得信号量就一直等待
完成和down相同的工作,但操作是可中断的
永远不会休眠,如果信号量在调用时不可获得, 就会立即返回一个非零值。
void up(struct semaphore *sem);
第十二页,共35页。
3-3 信号量和互斥体
使用信号量模板
DECLARE_MUTEX(sem);
if(down_interruptible(&sem))
{
return –ERESTARTSYS;
}

critical section

up(&sem);
定义信号量
获取信号量,保护临界区
临界区
释放信号量
第十三页,共35页。
3-3 信号量和互斥体
读取者/写入者信号量
数据类型:struct rw_semaphore;
初始化:
主要函数:
void init_rwsem(struct rw_semaphore *sem);
void down_read(struct rw_semaphore *sem);
int down_read_trylock(struct rw_semaphore *sem);
void up_read(struct rw_semaphore *sem);
void down_write(struct rw_semaphore *sem);
int down_write_trylock(struct rw_semaphore *sem);
void up_write(struct rw_semaphore *sem);
void downgrade_write(struct rw_semaphore *sem);
第十四页,共35页。
3-3 信号量和互斥体
读取者/写入者信号量实例
rw_semaphore_t rw_sem;
init_rwsem(&rw_sem); //
//读时获取信号量
down_read(&rw_sem);
… //临界资源
up_read(&rw_sem);

down_write(&rw_sem);
… //临界资源
up_write(&rw_sem);
定义读写信号量
初始化读写信号量
获取临界资源
临界区
释放临界资源
第十五页,共35页。
3-4 completion
一种轻量级的机制
它允许一个线程告诉另一线程某个工作已经完成。
初始化
等待completion
DECLARE_COMPLETION(xxx_completion);
struct completion xxx_completion;
init_completion(&xxx_completion);
void wait_for_completion(struct completion *c);
第十六页,共35页。
3-4 completion
触发完成
void complete(struct completion *c);
void complete_all(struct completion *c);
必须在重复使用该结构之前重新初始化它。下面这个宏可用来快速执行重新初始化:
INIT_COMPLETION(struct completion c);
*
第十七页,共35页。
3-4 completion
Completion使用示例
DECLARE_COMPLETION(xxx_comp);
ssize_t complete_read(struct file *filp,
char __user *buf,size_t count,
loff_t *pos)
{
wait_for_completion(&xxx_comp);
return 0;
}
ssize_t complete_write(struct file *filp,
const char __user *buf,size_t count,
loff_t *pos)
{
complete(&xxx_comp);
return count;
}
定义并初始化completion
等待某个事件完