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();
}
博文索引 持續更新中。。。