//主要记录一下作为并发的一个案例(based example)
#include <QtCore>
#include <stdio.h>
#include <stdlib.h>
const int DataSize = 50;
const int BufferSize = 20;
char buffer[BufferSize];
QSemaphore freeBytes(BufferSize);
QSemaphore usedBytes;
class Producer : public QThread
{
public:
void run() override
{
fprintf(stderr, "Producer->curTheadId:%d \n", reinterpret_cast<long>(QThread::currentThreadId()) );
for (int i = 0; i < DataSize; ++i) {
freeBytes.acquire();
buffer[i % BufferSize] = "ABCD"[i%4];
fprintf(stdout, "producer --> %d \n", i);
usedBytes.release();
}
}
};
class Consumer : public QThread
{
Q_OBJECT
public:
void run() override
{
fprintf(stderr, "Consumer->curTheadId:%d \n", reinterpret_cast<long>(QThread::currentThreadId()));
for (int i = 0; i < DataSize; ++i) {
usedBytes.acquire();
fprintf(stderr, "consumer --> %c \n", buffer[i % BufferSize]);
freeBytes.release();
}
fprintf(stderr, "\n");
}
signals:
void stringConsumed(const QString &text);
protected:
bool finish;
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Producer producer;
Consumer consumer;
consumer.start();
producer.start();
producer.wait();
consumer.wait();
return 0;
}
#include "semaphores.moc"