9信號量的操作


2,信號量源代碼
#include <QCoreApplication>
#include <QSemaphore>
#include <QThread>
#include <stdio.h>
const int DataSize=1000;
const int BufferSize=80;
int buffer[BufferSize];
QSemaphore freeBytes(BufferSize);
QSemaphore usedBytes(0);
//生產者類
class Producer:public QThread
{
public:
    Producer();
    void run();
};
Producer::Producer()
{

}
void Producer::run()
{
  for(int i=0;i<DataSize;i++)
  {
      freeBytes.acquire(); //申請
      buffer[i%BufferSize]=i%BufferSize; //填充數據
      usedBytes.release(); //釋放資源
  }
}
//消費者類
class Consumer:public QThread
{
public:
   Consumer();
   void run();
};
Consumer::Consumer()
{

}
void Consumer::run()
{
   for(int i=0;i<DataSize;i++)
   {
       usedBytes.acquire(); //獲得資源
       fprintf(stderr,"%d",buffer[i%BufferSize]);
       if(i%16==0&&i!=0)
       {
           fprintf(stderr,"\n");
       }
       freeBytes.release(); //釋放資源
   }
   fprintf(stderr,"\n");
}
//主函數
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Producer producer; //生產者
    Consumer consumer; //消費者

    //啓動生產者和消費者線程
    producer.start();
    consumer.start();
    //等待生產者和消費者執行完畢後退出程序
    producer.wait();
    consumer.wait();
    return a.exec();
}
博文索引  持續更新中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章