文档库 最新最全的文档下载
当前位置:文档库 › 信号处理机制(生产者消费者)

信号处理机制(生产者消费者)

#include
#include
#include
#include
#include
#include
#include
#define N 5
int in = 0,out = 0 ;
int buffer[N];
pthread_t ntid[2];
sem_t empty_sem;
sem_t full_sem;
pthread_mutex_t mutex; // 互斥信号量,一次只有一个线程访问缓冲

void * producer (void*arg)
{
int i;
while(1){
//sleep(1);

sem_wait(&empty_sem);
pthread_mutex_lock(&mutex);

buffer[in]=rand()%1000+1;
in = (in + 1)%N;

for (i=0;iprintf("%d\t",buffer[i]);
printf("\n");

sem_post(&full_sem);
pthread_mutex_unlock(&mutex);


}

}

void * consumer(void*arg)
{
int j;
while(1){
//sleep(2);


sem_wait(&full_sem);
pthread_mutex_lock(&mutex);


buffer[out]=0;
out=(out + 1)%N;

for(j = 0;jprintf("%d\t",buffer[j]);
printf("\n");

sem_post(&empty_sem);
pthread_mutex_unlock(&mutex);
}
}

int main (void)
{
int error1, error2;
// 初始化同步信号量
int ini1 = sem_init(&empty_sem, 0, N);//产品队列缓冲同步
int ini2 = sem_init(&full_sem, 0, 0);//线程运行同步
if(ini1 && ini2 != 0) {
printf("信号量初始化失败!\n");
exit(1);
}
//初始化互斥信号量
int ini3 = pthread_mutex_init(&mutex, NULL);
if(ini3 != 0) {
printf("线程同步初始化失败!\n");
exit(1);
}

error1 =pthread_create(&ntid[0],NULL,producer,NULL);
if(error1!=0)
{
printf("thread create error\n");
exit(1);}

error2 =pthread_create(&ntid[1],NULL,consumer,NULL);
if(error2!=0)
{
printf("thread create error\n");
exit(1);
}

while(1)
{
sleep(1);
exit(0);
}
}



相关文档
相关文档 最新文档