zoukankan      html  css  js  c++  java
  • 34。队列

    http://blog.csdn.net/v_july_v/article/details/6126444

    队列的应用场景为:
    一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列

    生产者消费者线程演示  
    一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列 

    #include <windows.h>   
    #include <stdio.h>   
    #include <process.h>   
    #include <iostream>   
    #include <queue>   
    using namespace std;   
    HANDLE ghSemaphore;   //信号量   
    const int gMax = 100; //生产(消费)总数   
    std::queue<int> q;      //生产入队,消费出队  
    
    //生产者线程   
    unsigned int __stdcall producerThread(void* pParam)    
    {   
        int n = 0;   
        while(++n <= gMax)   
        {   
            //生产   
            q.push(n);   
            cout<<"produce "<<n<<endl;   
            ReleaseSemaphore(ghSemaphore, 1, NULL); //增加信号量   
            Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节   
        }   
        _endthread(); //生产结束   
        return 0;   
    } 
      
    //消费者线程
    unsigned int __stdcall customerThread(void* pParam)
    {
     int n = gMax;
     while(n--)
     {
      WaitForSingleObject(ghSemaphore, 10000);
      //消费
      
      q.pop();  
    
      cout<<"custom   "<<q.front()<<endl;   //小肥杨指出,原答案这句和上句搞错了顺序?
      Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节
     }
     //消费结束
     CloseHandle(ghSemaphore);
     cout<<"working end."<<endl;
     _endthread();
     return 0;
    }
    
     
    
    void threadWorking()   
    {   
        ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步   
           
        cout<<"working start."<<endl;   
        unsigned threadID;   
        HANDLE handles[2];   
        handles[0] = (HANDLE)_beginthreadex(    
                        NULL,    
                        0,    
                        producerThread,    
                        nullptr,    
                        0,    
                        &threadID);   
        handles[1] = (HANDLE)_beginthreadex(    
                        NULL,    
                        0,    
                        customerThread,    
                        nullptr,    
                        0,    
                        &threadID);    
        WaitForMultipleObjects(2, handles, TRUE, INFINITE);   
    }  
     
    int main()   
    {   
        threadWorking();   
        getchar();   
        return 0;   
    }
  • 相关阅读:
    opencv学习记录之霍夫变换
    opencv学习记录之模板匹配
    opencv之傅里叶变换
    opencv学习记录之图像金字塔
    opencv学习记录之图像梯度
    opencv学习记录之形态学操作
    opencv学习记录之腐蚀和膨胀
    使用Python解析豆瓣上Json格式数据
    互联网之子--亚伦.斯沃茨
    Json技术使用代码示例
  • 原文地址:https://www.cnblogs.com/buxianghe/p/3270309.html
Copyright © 2011-2022 走看看