操作系统进程和线程实验报告.docx
《操作系统进程和线程实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统进程和线程实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
操作系统进程和线程实验报告
一.进程的创建
1.编辑源程序。
2.编辑结果如下。
3.编译和运行程序。
4.运行解释结果
在语句p1=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了.这两个进程的几乎完全相同,将要执行的下一条语句都是if(p1==0).而fork函数有三种返回值。
(1)在父进程中,fork返回新创建子进程的进程ID;
(2)在子进程中,fork返回0;
(3)如果出现错误,fork返回一个负值;
所以,子进程中p1==0,输出Iamchild。
父进程p1>0,输出Iamparent。
1.编辑源程序。
2.编辑结果如下。
3.编译和运行程序。
4.运行解释结果
在语句p1=fork()之前,只有父进程执行,putchar(‘x’)语句将x放入父进程的缓冲区。
当成功创建子进程后,子进程复制父进程的缓冲区。
接着子进程运行输出xby,父进程输出xay。
1.编辑源程序。
2.编辑结果如下。
3.编译和运行程序。
4.运行解释结果
在语句p1=fork()之前,只有父进程执行,putchar(‘x’)语句将x放入父进程的缓冲区。
当成功创建子进程后,子进程复制父进程的缓冲区。
接着子进程输出b后,执行exit(0)系统调用终止执行。
父进程输出a后继续输出y。
所以父进程输出xay而子进程输出xb。
1.编辑源程序。
2.编辑结果如下。
3.编译和运行程序。
4.运行解释结果
语句while(p1=fork()==-1)创建了子进程和父进程。
父进程执行到wait()时,等待子进程的终止信号,当子进程执行完exit(0)后,父进程才继续执行。
实现了父进程等待子进程。
1.编辑源程序。
2.编辑结果如下。
child.c
child_parent.c
3.编译和运行程序。
4.运行解释结果
语句while(p1=fork()==-1)创建了子进程和父进程。
父进程执行wait(0)等待子进程的终止信号。
子进程加载child程序,输出Iamachild。
子进程结束发出终止信号给父进程,父进程收到终止信号,继续执行,最后也执行exit(0),终止。
1.编辑源程序。
2.编辑结果如下。
3.编译和运行程序。
4.运行解释结果
pthread_create()函数创建进程。
第一个参数为指向线程标识符的指针,及程序中的id1,id2,
第二个参数设置线程属性,程序中没设置,即为NULL,第三个参数是运行函数的起始地址,用指针指向myThread函数的起始地址,最后一个参数是运行函数的参数。
该程序创建了两个进程,id1,id2。
在线程要运行的函数中设置了sleep函数,两个进程交替执行输出Thisisthe1/2stpthread
created。
最后pthread_join函数为线程阻塞的函数,等待线程的结束,当函数返回是,被等待的线程的资源被收回。
1.编辑源程序。
2.编辑结果如下。
3.编译和运行程序。
4.运行解释结果
函数pthread_mutex_init生成了一个互斥锁。
该程序创建了两个线程。
两个线程交替执行,并使用互斥锁,对公共变量number进行递增。
实现了两个线程对一个数的递加。
最后使用pthread_join函数阻塞。