- 89
- 0
- 约5.67千字
- 约 23页
- 2017-08-16 发布于天津
- 举报
实验三线程同步与通信一实验目的掌握下线程的概念了解线程同步与通信的主要机制通过信号灯操作实现线程间的同步与互斥二实验内容通过多线程与信号灯机制设计并实现计算机线程与线程共享缓冲区的同步与通信程序要求两个线程共享公共变量线程负责计算到的累加每次加一个数线程负责打印输出累加的中间结果三预备知识下的信号灯及其操作在中信号灯是一个数据集合可以单独使用这一集合的每个元素有关的系统调用命令返回一个被内核指定的整型的信号灯索引执行对信号灯集的操作执行对信号灯集的控制操作信号灯的定义数据结构的原型是在中定义信号
实验三(1)、线程同步与通信 一、实验目的 1、掌握Linux下线程的概念; 2、了解Linux线程同步与通信的主要机制; 3、通过信号灯操作实现线程间的同步与互斥。 二、实验内容 通过Linux多线程与信号灯机制,设计并实现计算机线程与I/O线程共享缓冲区的同步与通信。 程序要求:两个线程,共享公共变量a 线程1负责计算(1到100的累加,每次加一个数) 线程2负责打印(输出累加的中间结果) 三、预备知识 1、Linux下的信号灯及其P、V操作 在Linux中信号灯是一个数据集合,可以单独使用这一集合的每个元素。 有关的系统调用命令: 1)semget:返回一个被内核指定的整型的信号灯索引。 2)semop:执行对信号灯集的操作 3)semctl:执行对信号灯集的控制操作。 信号灯的定义: 数据结构的原型是semid_ds,在linux/sem.h中定义:struct semid_ds{ struct ipc_permsem_perm;/*permissions..seeipc.h*/ time_t sem_otime;/*last semop time*/ time_t sem_ctime;/*last change time*/ struct sem*sem_base;/*ptr to first semaphore in array*/ struct wait_queue *eventn; struct wait_queue *eventz; struct sem_undo*undo;/*undo requestson this array*/ ushort sem_nsems;/*no. of semaphores in array*/}; 信号量的创建: 使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集. 原型:int semget(key_t key,int nsems,int semflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败,则返回-1. semflg:IPC_CREAT | 0666 nsems:信号灯的个数 信号量的操作: 系统调用semop();调用原型:int semop(int semid,struct sembuf *sops,unsigned nsops);返回值:0,如果成功。-1,如果失敗 struct sembuf{ushort sem_num;/*semaphore index in array*/short sem_op;/*semaphore operation*/short sem_flg;/*operation flags*/ } sem_num 将要处理的信号量的下标。 sem_op 要执行的操作。sem_flg 操作标志,IPC_NOWAIT P操作 void P(int semid,int index) { struct sembuf sem; sem.sem_num = index; sem.sem_op = -1; sem.sem_flg = 0; //操作标记:0或IPC_NOWAIT等 semop(semid,sem,1); //1:表示执行命令的个数 return; } V操作 void V(int semid,int index) { struct sembuf sem; sem.sem_num = index; sem.sem_op = 1; sem.sem_flg = 0; semop(semid,sem,1); return; } 信号量的赋值:系统调用semctl()原型:int semctl(int semid,int semnum,int cmd,union semun arg);返回值:如果成功,则为一个正数。 参数cmd中可以使用的命令如下: ·IPC_RMID将信号量集从内存中删除。?·SETALL设置信号量集中的所有的信号量的值。?·SETVAL设置信号量集中的一个单独的信号量的值。arg.val=1; semctl(semid,1,SETVAL,arg) 2、线程 1)线程创建 pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(
您可能关注的文档
最近下载
- 云南省2023年《医学综合》专升本真题试卷.docx VIP
- 铁路信号自动闭塞工程配线图表设计—区间组合柜侧面端子配线表设计.pptx
- 新生儿窒息复苏指南.ppt VIP
- 临床护理技术操作并发症的预防与处理规范.pptx
- 智慧交通综合运维管理平台解决方案.pdf VIP
- 2023—2024学年江苏省天一中学高一下学期强化班期末考试数学试卷.doc VIP
- SHT3007-2014 石油化工储运系统罐区设计规范.pdf VIP
- 乡村振兴建设顶层规划建设方案.pptx VIP
- 第一模拟-【中职专用】2025年四川省高等职业院校单独招生文化课考试(中职类)语文模拟卷(原卷版).docx VIP
- 2025年学院管理自查报告存在问题及整改措施.docx VIP
原创力文档

文档评论(0)