Linux下创建进程线程以及通信技术的使用


一、实验目的

学习使用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。他们的任务如下:

1)子进程P1打印自己的pid,然后使用exec(族)系统调用显示当前目录下文件和子目录的详细信息。

2)子进程P2中生成Fibonacci序列,序列的个数在程序命令行中作为参数传入,例如,参数为7,则子进程P2生成的Fibonacci序列为0、1、2、3、5、8、13。通过某种进程通信机制(共享内存、管道、消息等IPC机制),子进程P2把生成的Fibonacci序列发送给父进程,并由父进程输出(打印)Fibonacci序列。在父子进程通信的过程中必须实现同步,以使在子进程完成生成序列之前,父进程不会输出Fibonacci序列。使用wait()系统调用可以实现各进程的同步。执行必要的错误检查以保证不会接受命令行参数传递来的负值。

2. 编写程序实现生产者-消费者问题。使用linux的Pthread线程库,创建2个生产者线程和2个消费者线程。生产者线程计算当前的时间,把时间、第几次计算时间的序号(循环次数)和线程ID作为一个消息,把消息放入缓冲区,消费者线程从缓冲区读出一个消息并显示消息。缓冲区大小为5个,每个生产者线程生产10个消息,每个消费者线程消费10个消息,即生产和消费分别为20次。

生产者及消费者线程之间需要实现同步和互斥,Pthread线程库的信号量机制可以完成这一任务。

  • 1
  • 2
  • 下一页

相关内容