操作系统学习笔记:xv6 Barriers
来源:互联网 发布:阿里云 cdn 配置 编辑:程序博客网 时间:2024/05/01 01:05
此次作业是使用环境变量(condition variables)来实现barriers.c这个函数。
barrier.c的作用相当于一条起跑线,只用当所有的线程都到了起跑线的时候,系统才会允许线程继续运行(起跑),其中,先到的起跑线的进行需要等待后到起跑线的进程。
首先根据作业要求,下载barrier.c并放到xv6的文件夹里,然后运行它:
$ gcc -g -O2 -pthread barrier.c$ ./a.out 2系统会显示assertion Failed,到此,准备阶段完成。
然后修改barrier.c中的barrier()函数:
barrier()
{
pthread_mutex_lock(&bstate.barrier_mutex); //对临界区进行加锁,barrier_mutex是开头定义的信号量
bstate.nthread++; //将到达当前barrier的线程的数量加一
if (bstate.nthread == nthread) { //如果所有的线程都到达了当前barrier
pthread_cond_broadcast(&bstate.barrier_cond); //针对barrier_cond这个环境变量广播,表示激活所有线程
bstate.nthread = 0;
bstate.round++;
}
else {
pthread_cond_wait(&bstate.barrier_cond, &bstate.barrier_mutex);//当还有线程没有到达barrier时,释放互斥锁,然后休眠
}
pthread_mutex_unlock(&bstate.barrier_mutex); //释放互斥锁
}
再次运行程序:
成功
- 操作系统学习笔记:xv6 Barriers
- XV6操作系统 学习笔记(源代码共9100行)
- 操作系统学习笔记:Homework9: bigger files for xv6
- ubuntu安装qemu+xv6进行操作系统学习
- 【xv6学习之第0章】操作系统接口
- xv6操作系统接口
- Xv6,MIT教学性操作系统
- 安装xv6笔记
- Xv6学习之kinit1
- 麻省理工大学XV6操作系统赏析(序言)
- XV6操作系统的安装与使用
- 操作系统页面管理机制的启动流程-xv6
- 操作系统学习笔记:操作系统类型
- 操作系统学习笔记--操作系统基本概念
- 【xv6学习之HW1】shell
- 【xv6学习之番外篇】保护
- 【xv6学习之HW3】xv6 lazy page allocation
- 计算机学习笔记--操作系统
- 项目评估
- 实验 聊天界面UI
- 64位win7环境下进行Scrapy安装
- css
- VS2015中MFC编译运行错误——无法解析的外部符号
- 操作系统学习笔记:xv6 Barriers
- 7 纹理
- 为什么在vs 中用include<iostream.h>不行,而include<stdio.h>可用
- 苏嵌26 16.12.03
- 51nod-1262 扔球(欧拉函数)
- 数据结构(关于串的KMP匹配算法及其改进)
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- ansible 切换用户建立ssh连接并使用sudo 权限执行程序
- poj_1260 Pearls(dp)