Linux 生产者、消费者之环形队列信号量

来源:互联网 发布:wifi无网络连接感叹号 编辑:程序博客网 时间:2024/05/29 05:12

一、环形队列实现生产者与消费者的互斥与同步

用sem_wait()、sem_post()实现二者的互斥与同步

二、接口

sem_tsem_init()sem_wait()sem_post()sem_destroy()

三、代码实现

#include <stdio.h>#include <semaphore.h>#include <pthread.h>#include <unistd.h>#define  s 64sem_t blanks;sem_t datas;int ring[s];void* consumer(void* arg){    int i = 0;    while(1)    {        sem_wait(&datas);        int data = ring[i];        printf("consumer done ...%d\n",data);        i++;        i %= s;        sem_post(&blanks);        sleep(1);    }}void* producter(void* arg){    int i = 0;    while(1)    {        sem_wait(&blanks);        int data = rand()%1234;        ring[i] = data;        printf("producter done ...%d\n",data);        i++;        i %= s;        sem_post(&datas);    }}int main(){    sem_init(&blanks,0,64);    sem_init(&datas,0,0);    pthread_t id1,id2;    pthread_create(&id1,NULL,consumer,NULL);    pthread_create(&id2,NULL,producter,NULL);    pthread_join(id1,NULL);    pthread_join(id2,NULL);    sem_destroy(&blanks);    sem_destroy(&datas);    return 0;}
0 0
原创粉丝点击