如何用C语言实现多线程下生产者消费者互斥同步问题

如题所述

整个程序以伪代码形式给出,当做一个提示吧,这样你就应该有思路了
生产者在存储区满时不能再生产,进入等待,消费者同理
完成同步互斥效果

/*----以下为代码部分-----*/
//定义全局变量
int empty = 1;//信号量表示存储单元空,可以生产产品
int full = 0;//信号量表示存储单元空,不可以消费产品
//P操作
void P(int &mutex)
{
*mutex--;
if(*mutex<0)
{
//当前进程挂起的程序实现
}
}
//V操作
void V(int &mutex)
{
*mutex++;
if(*mutex <=0)
{
//唤醒等待中的进程程序实现
}
}
//生产者程序
void producer()
{
P(& empty);//若此时存储区空,则可以生产,否则程序挂起等待
//生产一个产品操作
V(&full);//通知消费者进程,可以取产品
}
//消费者程序
void consumer(){
P(&full);//若此时存储区不空,则可以取产品,否则消费者程序挂起等待
//取走一个产品操作
V(& empty);//通知生产者进程可以生产
}
//主函数
void main()
{
//分别调用生产者,消费者程序,顺序不限,因为已经完成信号量的同步,若发生同步问题就会等待
producer();
consumer();
consumer();
producer();
………………
}
温馨提示:内容为网友见解,仅供参考
无其他回答

如何用C语言实现多线程下生产者消费者互斥同步问题
生产者,消费者互斥同步参考如下代码:include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <errno.h> #include <error.h> #include <semaphore.h> #define PRODUCER_NUM 10 #define CONSUMER_MUM 8 #define BUFFER_SIZE 20 #define S...

在linux下用c语言实现用多进程同步方法演示“生产者-消费者”问题
开始时没有产品sem_t empty_sem; \/\/ 同步信号量, 当满了时阻止生产者放产品sem_t full_sem; \/\/ 同步信号量, 当没产品时阻止消费者消费pthread_mutex_t mutex; \/\/ 互斥信号量, 一次只有一个线程访问缓冲int product_id = 0; \/\/生产者idint prochase_id = 0; \/\/消费者id\/* 打...

生产者-消费者”问题 用C语言编写
\/\/互斥信号量 int buffer[BUFFER]; \/\/缓冲区 int producer_id=0,consumer_id=0;\/\/生产者消费者ID int index_in=0,index_out=0;\/\/生产者 消费者 存放 消费的位置 void print()\/\/输出缓冲区 { int i; printf("Buffer:\\n"); for(i=0;i<20;i++) { printf...

C语言如何在线程间实现同步和互斥
1、互斥锁:互斥锁是用加锁的方式来控制对公共资源的原子操作(一旦开始进行就不会被打断的操作)互斥锁只有上锁和解锁两种状态。互斥锁可以看作是特殊意义的全局变量,因为在同一时刻只有一个线程能够对互斥锁进行操作;只有上锁的进程才可以对公共资源进行访问,其他进程只能等到该进程解锁才可以对公共资源进...

c语言如何实现多线程同时运行
C语言可以通过使用多线程库实现多线程同时运行。C语言本身并没有内置的多线程支持,但可以通过使用POSIX线程等第三方库来实现多线程编程。以下是对该过程的 1. 引入pthreads库:要使用多线程,首先需要安装并引入pthreads库。这个库提供了创建和管理线程所需的函数和机制。2. 创建线程:使用`pthread_...

c语言如何实现多线程同时运行
一、引入线程库 在C语言中实现多线程,首先需要引入相关的线程库。常见的线程库有pthreads库,它是可移植的,可以在多种操作系统上运行。通过包含对应的头文件,我们可以使用其中的函数来创建和管理线程。二、创建线程 在引入了线程库之后,我们需要创建线程。可以使用pthread_create函数来创建一个新的线程...

请问linux下C编程多线程同步和异步的区别,如何能实现程序的同步和异步编...
Linux下的多线程实现由pthread库提供,头文件为pthread.h。多线程最重要的就是要保护好共享资源(用互斥体,mutex),尤其是异步。代码哥哥就不上了,这里关键的不是代码的问题,也不是Linux、Windows的问题,重要的是概念的理解。哥们不妨先研究研究“生产者-消费者”这个常出现在教科书上的模型,这是一...

c语言windows下写多线程的问题
因为你没有加同步互斥机制,所以如果没有足够的sleep的话,线程函数和main函数里的printf("%d\\n",pid);之间的顺序是未知的,视你的系统环境而定。比如我运行了几次,结果都不一样,有时候是只输出5个随机数,有时候和你的结果一样。如果加了足够的sleep,那么就可以确保在执行printf("%d\\n",pid)...

生产者消费者问题--进程
现要用c语言(而不是c++,vc++,java,c#等语言)在linux操作系统下实现生产者消费者问题,就是要产生两个进程而不是简单的模拟,哪位高手有源代码啊,我急需!!!要尽量简单一点,... 现要用c语言(而不是c++,vc++,java,c#等语言)在linux操作系统下实现生产者消费者问题,就是要产生两个进程而不是简单的模拟,哪位...

请问用C语言在windows上建立多线程需要用什么函数最好,
\/\/开始请求生产 printf("Producer %2d sends the produce require.\\n",m_serial); \/\/确认有空缓冲区可供生产,同时将空位置数empty减1;用于生产者和消费者的同步; wait_for_semaphore = WaitForSingleObject(empty_semaphore,-1); \/\/互斥访问下一个可用于生产的空临界区,实现写写互斥; wait_for_mutex = Wait...

相似回答