- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哲学家问题LINUX实现
哲学家问题在Linux上的实现 授课教师:江兰帆 E-Mail: jiang_lanfan@126.com 相关系统调用 1、fork () 功能:创建子进程。 入口参数:无。 出口参数:正确时,对父进程返回值为子进程的pid (正整数),对子进程返回0。错误时,返回值为 -1。 fork () 注意:在子进程刚被创建时,它和其父进程具有相同的共享正文段,而其他进程信息(数据段,栈等)则完全拷贝父进程而得到。 相关系统调用 2、当父进程通过fork创建了子进程之后, 父进程和子进程的执行顺序是无法控制的。如果想控制, 可以让父进程调用等待函数wait。 #include sys/types.h#include sys/wait.hpid_t wait(int *status);函数返回: 若成功则为进程ID,若当前无子进程则返回 -1 。参数说明:status: 如果是不是空指针, 则子进程的返回状态保存在该指针指向的整型变量中; 如果是空指针, 则忽略返回状态. 相关系统调用 3、 exit (int status) 终止现运行进程,将status传递给父进程。 #include sys/types.h#include sys/wait.h#include unistd.h#include stdlib.hmain(){pid_t pc,pr;pc=fork();if(pc0) /* 如果出错 */ printf(error ocurred!\n);else if(pc==0){ /* 如果是子进程 */ printf(This is child process with pid of %d\n,getpid()); sleep(3); /* 睡眠10秒钟 */ }else{ /* 如果是父进程 */ pr=wait(NULL); /* 在这里等待 */ printf(I catched a child process with pid of %d\n),pr);} exit(0);} IPC通信机制简介 UNIX System V中提供了一系列新的进程通信机构,即IPC机构。其出现大大加强了UNIX的进程间通信功能。它包括三种:消息传送、信号量和共享存储器。 IPC信号量机制中的有关系统调用 1、 #include sys/types.h #include sys/ipc.h #include sys/sem.h int semget (key_t key, int nsems, int semflg)功能:创建一个信号量集合,分配相应数据结构并返回与之对应的信号量标识符,出错时返回 -1。 semget参数说明 ① key:信号集的键 ② nsems:创建的信号量集合中包含的信号量个数 ③ semflg:信号存取权标志与建立标志。其中其低9位为表示信号的存取权限(拥有者,同一使用群及其它用户) ,这与文件系统的类似。建立标志则有两个,分别IPC_CREAT和IPC_EXCL IPC_CREAT:若该信号不存在,semget将建立它。 IPC_EXCL:只有在信号集不存在的情况下,新的信号才会建立。否则semget()将返回-1,并设置错误码。 semget 创建信号量集合过程的简单描述:if (key == IPC_PRIVATE) 在系统中创建一个新的信号量集合,返回其semid;else if ((semflgIPC_CREAT) (!(semflgIPC_EXCL))) if (与key相关的信号量集合存在) 直接返回其semid; else在系统中创建一个新的信号量集合,返回其semid;else if ((semflgIPC_CREAT) (semflgIPC_EXCL)) if (与key相关的信号量集合存在) 返回 -1; else在系统中创建一个新的信号量集合,返回其semid;else 不创建信号量,返回 -1. semget 如何确定key: 使用函数key_t ftok (char *path , char id)。它返回由path和id所确定的IPC键值,当两者中任一不同时将返回不同的键值。若path提供的文件名不存在则返回 -1。 #include sys/types.h #include sys/ipc.h #include sys/sem.h int main() {int semid, numsems=5;if((semid=semget(IPC_PRIVATE,numsems,IPC_CREAT|0660))==-1){ return(-1);}re
文档评论(0)