• 简介


    #include <pthread.h> 
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    struct msg 
    {
        struct msg *next;
        int num;
    }; 
     
    struct msg *head;
    struct msg *mp;
     
    //静态初始化:一个条件变量和一个互斥量 
    pthread_cond_t has_product = PTHREAD_COND_INITIALIZER;
    pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
     
    void *consumer(void *p) 
    {
        for(; ;) {
            pthread_mutex_lock(&lock);
            while(head == NULL) {  //头指针为空,说明没有节点 可以为if吗 
                pthread_cond_wait(&has_product, &lock);
            }
            mp = head;
            head = mp->next; //模拟消费掉一个产品
            pthread_mutex_unlock(&lock);
            
            printf("-consume-----%d
    ", mp->num);
            free(mp);
            sleep(rand() % 5);
        }
    }
     
    void *producer(void *p) 
    {
        for(; ;) {
            mp = malloc(sizeof(struct msg));
            mp->num = rand() % 1000 + 1;  //模拟生产一个产品
            printf("-Produce----%d
    ", mp->num);
            
            pthread_mutex_lock(&lock);
            mp->next = head;
            head = mp;
            pthread_mutex_unlock(&lock);
            
            pthread_cond_signal(&has_product);  //将等待在该条件变量上的一个线程唤醒
            sleep(rand() % 5);    
        }
    }
     
    int main()
    {
        pthread_t pid, cid;
        srand(time(NULL));
        
        pthread_create(&pid, NULL, producer, NULL);
        pthread_create(&cid, NULL, consumer, NULL);
        
        pthread_join(pid, NULL);
        pthread_join(cid, NULL);
        return 0;         
    }
    

      

  • 相关阅读:
    unity, texture import settings
    unity, 最简单的additive shader
    unity, shader input and output
    unity, multi pass shader中的surface pass
    unity, 荧光效果(bloom)
    unity, 查看内置shader源码
    unity, Find References In Scene
    unity 主循环
    unity 显示帧率
    HttpUrlConnection的setDoOutput与setDoInput的区别
  • 原文地址:https://www.cnblogs.com/sunbines/p/10120048.html
Copyright © 2020-2023  润新知