好文档 - 专业文书写作范文服务资料分享网站

进程同步:实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

1.实验内容(进程的同步)

(1) 阅读理解示例程序。

(2) 说明示例程序是否能适合解决N个生产者和1个消费者问题,并设计实验验证 (3) 参照教材修改为N个生产者和1个消费者问题

(4) 思考N个生产者和M个消费者问题的解决方案(不要求) (5) 利用信号量解决同步问题。

2.实验目的

通过程序模拟及验证生产者消费者问题等经典问题,深入理解并发中的同步和互斥的概念

3.实验原理

(1)进程概念:

(1.定义:程序的一次执行过程

(2.三种基本状态:就绪状态,执行状态,阻塞状态 (2)进程同步:

(1.定义:并发进程在执行次序上的协调,以达到有效的资源共享和相互合作,使程序执行有可再现性。

(2.两种形式的制约关系:(一:资源共享关系:进程间接制约,需互斥地访问临界资源。)、(二:相互合作关系:进程直接制约)

(3.临界资源:一次仅允许一个进程访问的资源,引起不可再现性是因为临界资源没有互斥访问。

(3)信号量:定义一个用于表示资源数目的整型量S,它与一般的整型量不同,除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问,俗称P,V操作。通俗来讲就是用P来访问资源后减去一个单位资源,用V操作来释放一个单位资源就是现有资源上加一个单位资源。

4.实验内容

一:说明示例程序是否能适合解决N个生产者和1个消费者问题,并设计实验验证

答:示例程序不能解决多个生产者和消费者的问题,它是解决单个消费者和生产者的。如果可以就要修改代码,如“二”所说。 二:多个消费者和生产者的问题

生产者1 生产者2 生产者3 生产者4 缓冲区 消费者 生产者5 生产者6 如上图所示:如果要解决多个生产者和消费者的问题:

第一步:分析上图得出了两种关系,分别是异步和同步的关系

第二步:异步关系的是生产者和生产者之间的,因为同一时刻只能有一个生产者访问缓冲区,所以我们就可以设置临界资源.获得临界资源的生产者才能把产品放到缓冲区里

第三步:同步关系有两个,首先是生产者和缓冲区之间,再是缓冲区和消费者之间。他们都满足一前一后的关系,即当缓冲区空间未满时,生产者才可以放产品;缓冲区不为空的时候才可以让消费者取出产品消费。

第四步:设计变量,用C语言编程,在linux上运行,观察结果。代码如下:

#include #include #include #include #include #include int n=10;

int buffer[10];//缓冲区空间大小 int in=0,out=0;

sem_t mutex,empty,full;//设置临界资源,定义两个同步关系的信号量 void* producer(void *arg){ //生产者 sem_wait(&mutex); //访问临界资源 int tag= pthread_self()0; int nextPro;

srand(time(NULL)+tag); while(1){

nextPro = rand()?;

sem_wait(&empty); //生产一个产品,并放入缓冲区,缓冲区空间大小-1 buffer[in] = nextPro; in = (in+1)%n;

相关头文件 sem_post(&full);//生产一个产品,并放入缓冲区,产品数量+1 printf(\

sem_post(&mutex);//释放临界资源,给其它线程用 usleep(1000*1000/2); } }

void* consumer(void *arg) //消费者 {

int item; while(1){

sem_wait(&full);//消费一个产品,缓冲区产品数量-1 item = buffer[out];

sem_post(&empty); //消费一个产品,缓冲区大小+1 printf(\ out = (out+1)%n; usleep(1000*1000/2); } }

int main(int argc, char const *argv[]) {

pthread_t tid[6];

//定义7个线程

//对临界资源和信号量赋初值

sem_init( &mutex, 0,1); sem_init( &empty, 0,10); sem_init( &full, 0,0); for(int i=0;i<6;i++){

//

pthread_create(&tid[i], NULL, producer, NULL); } //执行生产者线程

进程同步:实验报告

1.实验内容(进程的同步)(1)阅读理解示例程序。(2)说明示例程序是否能适合解决N个生产者和1个消费者问题,并设计实验验证(3)参照教材修改为N个生产者和1个消费者问题(4)思考N个生产者和M个消费者问题的解决方案(不要求)(5)利用信号量解决同步问题。2.实验目的通过程序模拟及验证生产者消
推荐度:
点击下载文档文档为doc格式
4514u4gilt77xpo5846y5ap1c1kzfj00qbb
领取福利

微信扫码领取福利

微信扫码分享