- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二、线程同步与通信
实验二、线程同步与通信 一、实验目的 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 *(*st
您可能关注的文档
- 大学物理实验—绪论.ppt
- 大跨度钢管拱桥钢管混凝土顶升浇注施工工法.doc
- 大连市科技计划项目可行性研究报告.doc
- 天伦孕育基金援助申请表.doc
- 天津大学专业工作站项目(TD2014-N-37)招标公告.doc
- 天津市第一中心医院实验室设备项目(TGPC-2006-A-0487)项目需求书.doc
- 天荒坪抽水蓄能电站初期运行特点.doc
- 夹江县云吟职业中学校网络实验室设备采购.doc
- 好客OA办公管理系统.doc
- 如何正确选择方坯连铸机电磁搅拌器.doc
- 2024年江西省寻乌县九上数学开学复习检测模拟试题【含答案】.doc
- 2024年江西省省宜春市袁州区数学九上开学学业水平测试模拟试题【含答案】.doc
- 《GB/T 44275.2-2024工业自动化系统与集成 开放技术字典及其在主数据中的应用 第2部分:术语》.pdf
- 中国国家标准 GB/T 44275.2-2024工业自动化系统与集成 开放技术字典及其在主数据中的应用 第2部分:术语.pdf
- GB/T 44285.1-2024卡及身份识别安全设备 通过移动设备进行身份管理的构件 第1部分:移动电子身份系统的通用系统架构.pdf
- 《GB/T 44285.1-2024卡及身份识别安全设备 通过移动设备进行身份管理的构件 第1部分:移动电子身份系统的通用系统架构》.pdf
- 中国国家标准 GB/T 44285.1-2024卡及身份识别安全设备 通过移动设备进行身份管理的构件 第1部分:移动电子身份系统的通用系统架构.pdf
- GB/T 44275.11-2024工业自动化系统与集成 开放技术字典及其在主数据中的应用 第11部分:术语制定指南.pdf
- 中国国家标准 GB/T 44275.11-2024工业自动化系统与集成 开放技术字典及其在主数据中的应用 第11部分:术语制定指南.pdf
- 《GB/T 44275.11-2024工业自动化系统与集成 开放技术字典及其在主数据中的应用 第11部分:术语制定指南》.pdf
文档评论(0)