当前位置:文档之家› 操作系统--进程和线程实验报告

操作系统--进程和线程实验报告

一.进程的创建
1.编辑源程序。

2. 编辑结果如下。

3.编译和运行程序。

4.运行解释结果
在语句p1=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了.这两个进程的几乎完全相同,将要执行的下一条语句都是if(p1==0). 而fork函数有三种返回值。

(1)在父进程中,fork返回新创建子进程的进程ID;
(2)在子进程中,fork返回0;
(3)如果出现错误,fork返回一个负值;
所以,子进程中p1==0,输出I am child。

父进程p1>0,输出I am parent。

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程序,输出I am a child。

子进程结束发出终止信号给父进程,父进程收到终止信号,继续执行,最后也执行exit(0),终止。

1.编辑源程序。

2.编辑结果如下。

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函数阻塞。

相关主题