生产与消费者三种模型

来源:互联网 发布:网络集成商有哪些 编辑:程序博客网 时间:2024/06/05 07:06

1.生产者—消费者模型的321原则
生产者-生产者 互斥
消费者-消费者 互斥
生产者-消费者 互斥,同步

typedef struct _head //结构体声明{    int data;    struct _head *next;}Node,*Node_p,**Node_pp;Node_p head; //头指针声明void InitList(Node_pp _h) //初始化带头节点链表{    *_h =(Node_p)malloc(sizeof(Node));    (*_h)->next = NULL;}void PushFrond(Node_p _h,int K)//{    Node_p tmp = _h->next;    _h->next =(Node_p)malloc(sizeof(Node));    _h = _h->next;    _h->data = K;    _h->next = tmp;}Node_p PopFrond(Node_p _h){    if(_h->next == NULL)        return NULL;    Node_p tail = _h->next;    _h->next = tail->next;    return tail;}

void *consume(void *arg) // 用于消费,即调用PopFrond
void &product(void *arg) //用于生产,即调用PushFrond


pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&mutex_lock);//加锁
pthread_mutex_unlock(&mutex_lock);//解锁


pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_cond_wait(&cond,&mutex_lock);//等待
pthread_cond_signal(&cond);//发信号


void* product(void *arg){    while(1){        int n = rand()/12123;        pthread_mutex_lock(&mutex_lock);    //解锁访问        PushFrond(head,n);        printf("product done! %d\n",n);        pthread_mutex_unlock(&mutex_lock);//解锁        pthread_cond_signal(&cond);//生产完成,发送信号,消费者消费        sleep(2);    }    return NULL;}void *consum(void *arg){    while(1){        pthread_mutex_lock(&mutex_lock);//加锁访问        Node_p tmp = PopFrond(head);        while(tmp == NULL)//当没有资源时,则阻塞等待        {            pthread_cond_wait(&cond, &mutex_lock);            tmp = PopFrond(head);        }        printf("consum done! %d\n",tmp->data);        pthread_mutex_unlock(&mutex_lock);//解锁    }    return NULL;}
原创粉丝点击