一、实验目的
学习使用Linux的系统调用和pthread线程库编写程序,进一步理解、掌握操作系统进程、线程概念,学习编写多线程程序,掌握解决多线程的同步与互斥问题。
二、实验内容
1. Fibonacci序列是0, 1, 1, 2, 3, 5, 8, .... ,通常它可以表示为:
f ib0 = 0
f ib1 = 1
f ibn = f ibn−1 + f ibn−2
编写一个C程序,使用系统调用fork()创建两个子进程P1和P2。
2. 下面的程序使用pthread线程库创建两个线程,两个线程都要访问共享变量counter。按照源程序的逻辑,两个线程各循环5次,每次循环对counter变量加1,最后打印的结果应该是10。在你的系统中,编译并运行程序,观察运行结果,请回答以下问题。
3. 编写程序实现生产者-消费者问题。使用Linux的pthread线程库,创建2个生产者线程和2个消费者线程。生产者线程计算当前的时间,把时间,第几次计算时间的序号(循环次数)和线程ID作为一个消息,把消息放入缓冲区。消费者线程从缓冲区读出一个消息并显示消息。缓冲区大小为5个,每个生产者线程生产10个消息,每个消费者线程消费10个消息,即生产和消费分别为20次。
主要仪器设备(必填)
操作系统:Ubuntu11.10,内核版本3.0.0-12
四、操作方法和实验步骤
实验1-1
1.运行vim fib.c,在vim中编辑源代码,编辑完毕后保存退出;
2.运行gcc -o fib fib.c,完成编译;
3.运行./fib,观察运行结果。
实验1-2
进程通信方式
1.运行vim 1-2.c,在vim中编辑源代码,编辑完毕后保存退出;
2.运行gcc -o 1-2 1-2.c -lpthread,完成编译;
3.运行./1-2,观察结果;
4.对问题2,修改代码,重新编译,观察运行结果;
加了一些无意义的代码并额外引用了一次counter。
5.对问题3,修改代码,重新编译,观察运行结果;
第一次,将两个sleep的数值均调整为2;第二次,把第一个sleep的数值调整为3,第二个调整为2;第三次,把第一个sleep的数值调整为2,第二个调整为3.
6.对问题4,运行vim pthread.c,在vim中编辑源代码,编辑完毕后保存退出;
7.运行gcc -o pthread pthread.c –lpthread,完成编译。运行程序后,观察运行结果。截图见实验结果
与分析。
实验1-3
1.运行vim 1-3.c,在vim中编辑源代码,编辑完毕后保存退出;
2.运行gcc -o 1-3 1-3.c -lpthread,完成编译;