2010-09-24 回答
面只有两个线程,是生产者/消费者模式,已编译通过,注释很详细。
/* 以生产者和消费者模型问题来阐述linux线程的控制和通信你
生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。
缓冲区有n个,是一个环形的缓冲池。
*/
#include
#include
#define buffer_size 16
struct prodcons
{
int buffer[buffer_size];/*实际存放数据的数组*/
pthread_mutex_t lock;/*互斥体lock,用于对缓冲区的互斥操作*/
int readpos,writepos; /*读写指针*/
pthread_cond_t notempty;/*缓冲区非空的条件变量*/
pthread_cond_t notfull;/*缓冲区未满 的条件变量*/
};
/*初始化缓冲区*/
void pthread_init( struct prodcons *p)
{
pthread_mutex_init(&p->lock,null);
pthread_cond_init(&p->notempty,null);
pthread_cond_init(&p->notfull,null);
p->readpos = 0;
p->writepos = 0;
}
/*将产品放入缓冲区,这里是存入一个整数*/
void put(struct p