zoukankan      html  css  js  c++  java
  • linux mutex

    #include <iostream>
    #include <queue>
    #include <cstdlib>
    
    #include <unistd.h>
    #include <pthread.h>
    
    using namespace std;
    
    pthread_mutex_t mutex;
    queue<int> product;
    
    void* produce(void* ptr)
    {
        for(int i = 0; i < 10; ++i)
        {
            pthread_mutex_lock(&mutex);
            product.push(i);
            pthread_mutex_unlock(&mutex);
        }
    }
    
    void* consume(void* ptr)
    {
        for(int i = 0; i < 10;)
        {
            pthread_mutex_lock(&mutex);
            if(product.empty())
            {
                pthread_mutex_unlock(&mutex);
                continue;
            }
            ++i;
            cout << "consume" << product.front() << endl;
            product.pop();
            pthread_mutex_unlock(&mutex);
        }
    }
    
    int main()
    {
        pthread_mutex_init(&mutex, NULL);
        pthread_t tid1, tid2;
    
        pthread_create(&tid1, NULL, consume, NULL);
        pthread_create(&tid2, NULL, produce, NULL);
    
        void* retVal;
    
        pthread_join(tid1, &retVal);
        pthread_join(tid2, &retVal);
        return 0;
    }

    这种效率不高,因为消费者需要不停的去询问队列中是否不为空。

  • 相关阅读:
    Java线程
    IO流
    staitc
    权限修饰符
    nexus
    Maven
    Git 常用命令
    获取url参数
    创建存储过程和函数
    三层引号
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/6736657.html
Copyright © 2011-2022 走看看