当前位置: 技术问答>各位大侠,求助一个关于ubuntu系统的问题
iis7站长之家
求助:有关linux下的线程编程问题-生产者消费者问题
来源: 互联网 发布时间:2016-09-10
本文导语: 我写了一个程序,关于经典模型:生产者和消费者的问题,我采用linux下的线程的互斥的方式实现的,其中有三个信号量:avail和full:表示生产者和消费这线程间的同步问题,mutex表示两个线程之间的互斥问题。其中av...
我写了一个程序,关于经典模型:生产者和消费者的问题,我采用linux下的线程的互斥的方式实现的,其中有三个信号量:avail和full:表示生产者和消费这线程间的同步问题,mutex表示两个线程之间的互斥问题。其中avail:有界缓冲区的空单元数,开始初始值为N,full:有界缓冲区的非空单元数,初始值为0,mutex为互斥信号,初始值为1;程序如下:
目前的问题是:这个程序经过
gcc -o producer_customer.o -g -Wall -lrt producer_customer.c
运行后,没有像想象的那么运行,应该是无限循环的,可是这个程序之运行了几次生产和消费的过程,就听下来了,不再运行了,请教大虾们阿.........................
程序代码:
/*
函数名:producer_customer.c
函数功能:实现生产者和消费者之间的关系。采用线程机制,在同一个线程中实现这一机制,采用信号量实现他们之间的流程
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MYFIFO "myfifo"//缓冲区管道名
#define BUFFER_SIZE 3//缓冲区单元数
#define UNIT_SIZE 6//缓冲区的单元大小
#define RUN_TIME 30//运行时间
#define DELAY_TIME 5//最大周期时间
int fd;
time_t end_time;
sem_t mutex,avail,full;//信号量 mutex:互斥信号量,avail:有界缓冲区的空单元数,full:有界缓冲区的非空单元数
int real_read;
char buff[UNIT_SIZE];
int real_write_size;
int delay_time_p=2;
int delay_time_c=5;
void *producer();//生产者
void *customer();//消费者进程
int main()
{
pthread_t pth_pro_id,pth_cus_id;
int res;
end_time = time(NULL)+RUN_TIME;
//mutex = 1;
//fd = mkfifo(MYFIFO,O_CREAT|O_EXCL|0x666);
if((mkfifo(MYFIFO,O_CREAT|O_EXCL|0x666)
目前的问题是:这个程序经过
gcc -o producer_customer.o -g -Wall -lrt producer_customer.c
运行后,没有像想象的那么运行,应该是无限循环的,可是这个程序之运行了几次生产和消费的过程,就听下来了,不再运行了,请教大虾们阿.........................
程序代码:
/*
函数名:producer_customer.c
函数功能:实现生产者和消费者之间的关系。采用线程机制,在同一个线程中实现这一机制,采用信号量实现他们之间的流程
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MYFIFO "myfifo"//缓冲区管道名
#define BUFFER_SIZE 3//缓冲区单元数
#define UNIT_SIZE 6//缓冲区的单元大小
#define RUN_TIME 30//运行时间
#define DELAY_TIME 5//最大周期时间
int fd;
time_t end_time;
sem_t mutex,avail,full;//信号量 mutex:互斥信号量,avail:有界缓冲区的空单元数,full:有界缓冲区的非空单元数
int real_read;
char buff[UNIT_SIZE];
int real_write_size;
int delay_time_p=2;
int delay_time_c=5;
void *producer();//生产者
void *customer();//消费者进程
int main()
{
pthread_t pth_pro_id,pth_cus_id;
int res;
end_time = time(NULL)+RUN_TIME;
//mutex = 1;
//fd = mkfifo(MYFIFO,O_CREAT|O_EXCL|0x666);
if((mkfifo(MYFIFO,O_CREAT|O_EXCL|0x666)