1、操作系统进程和线程实验报告一.进程的创建1编辑源程序。2. 编辑结果如下。3.编译和运行程序。4.运行解释结果 在语句p1=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了.这两个进程的几乎完全相同,将要执行的下一条语句都是if(p1=0). 而fork函数有三种返回值。(1)在父进程中,fork返回新创建子进程的进程ID;(2)在子进程中,fork返回0;(3)如果出现错误,fork返回一个负值; 所以,子进程中p1=0,输出I am child。父进程p10,输出I am parent。1. 编辑源程序。2. 编辑结果如下。3. 编译和运行程序。4.
2、运行解释结果在语句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.
3、运行解释结果语句while(p1=fork()=-1)创建了子进程和父进程。父进程执行到wait()时,等待子进程的终止信号,当子进程执行完exit(0)后,父进程才继续执行。实现了父进程等待子进程。1. 编辑源程序。2. 编辑结果如下。child.cchild_parent.c3. 编译和运行程序。4. 运行解释结果语句while(p1=fork()=-1)创建了子进程和父进程。父进程执行wait(0)等待子进程的终止信号。子进程加载child程序,输出I am a child。子进程结束发出终止信号给父进程,父进程收到终止信号,继续执行,最后也执行exit(0),终止。1. 编辑源程序。2
4、. 编辑结果如下。3. 编译和运行程序。4. 运行解释结果pthread_create()函数创建进程。第一个参数为指向线程标识符的指针,及程序中的id1,id2,第二个参数设置线程属性,程序中没设置,即为NULL,第三个参数是运行函数的起始地址,用指针指向myThread函数的起始地址,最后一个参数是运行函数的参数。该程序创建了两个进程,id1,id2。在线程要运行的函数中设置了sleep函数,两个进程交替执行输出This is the 1/2st pthread created。最后pthread_join函数为线程阻塞的函数,等待线程的结束,当函数返回是,被等待的线程的资源被收回。1. 编辑源程序。2. 编辑结果如下。3. 编译和运行程序。4. 运行解释结果函数pthread_mutex_init生成了一个互斥锁。该程序创建了两个线程。两个线程交替执行,并使用互斥锁,对公共变量number进行递增。实现了两个线程对一个数的递加。最后使用pthread_join函数阻塞。