实验5 信号量.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验5 信号量

云南大学数学系《操作系统》课程上机实验报告 课程名称:操作系统 学期:2013—2014学年第一学期 成绩: 指导教师:李源 学生姓名: 凌建新 学生学号:20111910101 实验名称:信号量 实验编号:No. 5 实验日期: 实验学时: 2 学院: 数学与统计学院 专业: 信息与计算科学 年级: 2011级 实验目的: 了解信号量。 实验时应注意:  typedef unsigned long int pthread_t;  /come from /usr/include/bits/pthread.h  用途:pthread_t用于声明线程ID。  sizeof (pthread_t) =4; 函数说明: Semget()函数:    函数原型:int semget(key_t key,int nsems,int semflg);    功能:    获取与某个键关联的信号量集标识。信号量集被建立的情况有两种:    1.如果键的值是IPC_PRIVATE。    2.或者键的值不是IPC_PRIVATE,并且键所对应的信号量集不存在,同时标志中指定IPC_CREAT。    当调用semget创建一个信号量时,他的相应的semid_ds结构被初始化。ipc_perm中各个量被 设置为相应值:    sem_nsems被设置为nsems所示的值;    sem_otime被设置为0; semop:    函数原型:该函数定义在头文件 sys/sem.h中, int semop(int semid,struct sembuf *sops,size_t nsops);     功能:在 Linux 下,PV 操作通过调用semop函数来实现     用法:     #include sys/types.h     #include sys/ipc.h     #include sys/sem.h     int semop(int semid, struct sembuf *sops, unsigned nsops);     int semtimedop(int semid, struct sembuf *sops, unsigned nsops, struct timespec *timeout);    参数:    semid:信号集的识别码,可通过semget获取。    sops:指向存储信号操作结构的数组指针,信号操作结构的原型如下    struct sembuf    {    unsigned short sem_num; /* semaphore number */    short sem_op; /* semaphore operation */    short sem_flg; /* operation flags */    };    这三个字段的意义分别为:    sem_num:操作信号在信号集中的编号,第一个信号的编号是0。    sem_op:如果其值为正数,该值会加到现有的信号内含值中。通常用于释放所控资源的使用权;如果sem_op的值为负数,而其绝对值又大于信号的现值,操作将会阻塞,直到信号值大于或等于sem_op的绝对值。通常用于获取资源的使用权;如果sem_op的值为0,则操作将暂时阻塞,直到信号的值变为0。    sem_flg:信号操作标志,可能的选择有两种    IPC_NOWAIT //对信号的操作不能满足时,semop()不会阻塞,并立即返回,同时设定错误信息。    SEM_UNDO //程序结束时(不论正常或不正常),保证信号值会被重设为semop()调用前的值。这样做的目的在于避免程序在异常情况下结束时未将锁定的资源解锁,造成该资源永远锁定。    nsops:信号操作结构的数量,恒大于或等于1。    timeout:当semtimedop()调用致使进程进入睡眠时,睡眠时间不能超过本参数指定的值。如果睡眠超时,semtimedop()将失败返回,并设定错误值为EAGAIN。如果本参数的值为NULL,semtimedop()将永远睡眠等待。    返回说明:    成功执行时,两个系统调用都返回0。失败返回-1,errno被设为以下的某个值    E2BIG:一次对信号的操作数超出系统的限制    EACCES:调用进程没有权能执行请求的操作,并且不具有CAP_IPC_OWNER权能    EAGAIN:信号操作暂时不能满足,需要重试    EFAULT:sops或timeout指针指向的空间不可访问    EFBIG:sem_num指定的值无效    EIDRM:信号集已被移除    EINTR:系统调用阻塞时,被信号中断  

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档