分别在windows和linux下用信号量解决生产者消费者问题

本文通过实验介绍了如何在Windows和Linux操作系统中使用信号量解决生产者消费者问题。实验中,生产者和消费者作为独立线程运行,通过empty、full和mutex三个信号量协调对缓冲区的操作。在Windows环境下使用Win32 API,Linux环境下使用Pthread API。实验结果显示,生产者和消费者能正确地交替执行,验证了信号量机制的有效性。
摘要由CSDN通过智能技术生成

用信号量解决生产者消费者问题

                                     

  1. 实验目的

      通过实验,掌握Windows和Linux环境下互斥锁和信号量的实现 方法,加深对临界区问题和进程同步机制的理解,同时熟悉利用Windows API和Pthread API进行多线程编程的方法。

  2. 实验内容

      1.  在Windows操作系统上,利用Win32 API提供的信号量机制,编写应     用程序实现生产者——消费者问题。

      2.  在Linux操作系统上,利用Pthread API提供的信号量机制,编写应用程序实现生产者——消费者问题。

      3.  两种环境下,生产者和消费者均作为独立线程,并通过empty、full、mutex三个信号量实现对缓冲进行插入与删除。

      4.  通过打印缓冲区中的内容至屏幕,来验证应用程序的正确性。

  3. 实验步骤及运行结果和数据说明

      (a)windows下用win32API实现

         1.windows下建立多线程,分别表示生产者和消费者,首先引用   

    分别用来建立线程和引用windows下的函数

      

    创建两个线程,分别用来表示生产者和消费者。

     

    线程的表示函数 consumer和produce

  1. main函数的实现

      

    建立线程并关闭线程

  2. 变量的声明

      

      声明三个信号量emp,full,mutex初值分别为20,0,1

  3. 生产者消费者的实现

      生产者:

       

    做20次循环,每次生产一个,同时empty-1,full+1,mutex保持每次生产的互斥。

     消费者:

     

     同样也是20个消费者,但只有full>1时才能进行。

     

  1. 实验运行结果

        

     

    blinux下用pthread实现

    1.首先是linux下多线程的创建,需要引用pthread.h

     同时创建函数为 pthread_creat()

     

     

    我们创建了生产者和消费者两个线程,名字分别为cunsumer和producer

       2. 信号量的声明

         

         在这里,互斥信号量the_mutex用pthread_mutex_t创建,同步信号量                  用sem_t创建

         信号量的初始:

         

       3. 生产者和消费者函数的具体实现

         生产者:

      

      Sem_wait进行信号量的减一操作,sem_post进行信号量的加一操作

      Pthread_mutex_lock则相应的对互斥信号量进行操作

      消费者:

      

    与生产者类似,不过每次消费时,必须先判断full>0,只有大于0时才能消费

     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值