实验四 线程同步

1970-01-01 08:00

集 美 大 学 诚毅学院信息工程系

实 验 报 告

课程名称 序号名称

计算机操作系统

实验四 线程同步

姓名 专业 成绩

评语: 孙幸杰 计算1191

学号 日期 教师

2011957032

13.11.30 洪联系

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

1. 实验目的:

掌握在Linux环境下的线程创建: clone(); 线程同步:信号灯sem_t实现线程同步与互斥; 实现经典同步问题读者-写者问题; 2.实验环境

Win7系统 虚拟机安装的linux系统。 3.实验内容

用信号灯 + PV操作实现读者—写者问题; 用clone()函数4个读者线程和4个写者线程;

每次读者在共享数据区(缓冲区)读操作,或者写者在共享数据区写操作时,要显示当前正在操作的线程;

按读者优先或者写者优先编写程序,但要明确是那个优先; 4.实验程序 (有详细注释) #include #include #include #include #include //定义信号灯变量 sem_t r_w_w; sem_t mutex;

int readCount=0;

char info[20];//共享数据区 int Reader(int r_n) {

char rc[20]; while(1){

sem_wait(&mutex); readCount++; if(readCount==1) {

sem_wait(&r_w_w);

printf(“First reader inter CR!\\n”); }

sem_post(&mutex); printf(“ %dth reader is reading:”,r_n); strcpy(rc,info); printf(“%s\\n”,rc); sem_wait(&mutex); readCount--;

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

if(readCount==0)

sem_post(&r_w_w);

printf(“%dth reader exit.\\n”,r_n); sem_post(&mutex); }

} int Writer(int w_n) {

char ws[20];

sprintf(ws,”%dth writer”,w_n); while(1){

sem_wait(&r_w_w); strcpy(info,ws); sem_post(&r_w_w); } }

main(){

int i,arg;

int clone_flag; char *stack;

sem_init(&r_w_w,0,1); sem_init(&mutex,0,1);

clone_flag=CLONE_VM|CLONE_SIGHAND |CLONE_FS|CLONE_FILES; for(i=0;i<4;i++){ arg=i+1;

stack=(char *) malloc(4096);

clone((void *)Reader,&(stack[4096]), clone_flag,(void *)&arg); stack=(char *) malloc(4096);

clone((void *)Writer,&(stack[4096]), clone_flag,(void *)&arg); }

exit(1); }

5. 实验结果及其分析

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

6. 实验小结


实验四 线程同步.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015-2022年中国录放像机市场研究与前景趋势报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: