线程同步-课后练习
我要参与
线程同步-课后练习
学习任务 1.5k
等75人参与

示例

基于互斥锁实现生产者与消费者模型

  • 主线程为消费者
  • n 个子线程作为生产者
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <pthread.h>
#include <unistd.h>


static int number = 0;//共享变量

pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

void *thread_handler(void *arg)
{
    int cnt = atoi((char *)arg);
    int i,tmp;

    for(i = 0;i < cnt;i++){

        pthread_mutex_lock(&mtx);

        printf("线程 [%ld] 生产一个产品,产品数量为:%d\n",pthread_self(),++number);

        pthread_mutex_unlock(&mtx);

    }

    pthread_exit((void *)0);
}



int main(int argc,char *argv[])
{
    pthread_t tid;
    int i;
    int err;
    int total_of_produce = 0;//总的生产产品的数量
    int total_of_consume = 0;//总的消费产品的数量
    bool done = false;

    for (i = 1;i < argc;i++){
        total_of_produce += atoi(argv[i]); // 生产数量的总和
        err = pthread_create(&tid,NULL,thread_handler,(void *)argv[i]);
        if (err != 0)
        {
            perror("pthread_create()");
            exit(EXIT_FAILURE);
        }
    }


    for (;;){
        pthread_mutex_lock(&mtx);

        while(number > 0){
            total_of_consume++; // 消费产品总数
            printf("消费一个产品,产品数量为:%d\n",--number);
            done = total_of_consume >= total_of_produce; // 判断消费者数量与产品数量
            sleep(1);
        }

        pthread_mutex_unlock(&mtx);

        if (done)
            break;
    }

    return 0;
}
~    
  • 代码执行时的方式
./a.out 1 2 3   //表示3个线程,分别生产 1 个产品 2 个产品  3 个产品 总共6个产品

练习

实现生产者与消费者模型,并解决上述代码中线程资源的释放

去发布

登录后即可发布作业,立即

我的作业

全部作业

意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师