작성
·
263
1
안녕하세요. 수업내용과 약간 결이 다른 질문인데 궁금해서 질문 남깁니다.
'Re-entrancy를 만족하는 Thread 예제 구현' 에서 11분정도 됐을 때 numUsed가 0만 찍히는 출력 결과를 보여주셨습니다.
sleep으로 쓰레드를 멈추면 시간 차이가 큰 것 같아서 msleep, usleep으로 해도 동일하고, mutex로 lock-unlock을 해도 동일하게 0으로 출력 되더라구요.
출력창에 0만 출력되는 다른 이유가 있나요?
#include <QCoreApplication>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QDebug>
int number = 0;
QMutex mutex;
class ThreadA : public QThread
{
public:
ThreadA() {};
protected:
virtual void run()
{
for (int i = 0; i < 10; ++i)
{
// sleep(1);
// msleep(1);
usleep(1);
mutex.lock();
number++;
mutex.unlock();
}
};
};
class ThreadB : public QThread
{
public:
ThreadB() {};
protected:
virtual void run()
{
for (int i = 0; i < 10; ++i)
{
mutex.lock();
qDebug() << "number: " << number;
mutex.unlock();
}
};
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ThreadA threadA;
ThreadB threadB;
threadA.start();
threadB.start();
threadA.wait();
threadB.wait();
return a.exec();
}
제가 만들어본 코드입니다.
답변 2
0
안녕하세요.
제가 설명드리려 했던 부분은 다른 쓰레드에서 상황에 맞게끔 동기화를 어떻게 하는지 예제를 보여준 것이라서요.
그렇기 때문에 Re-Entrancy 이외의 상황은 의미가 없습니다.
따라서 이 예제에서는 쓰레드간의 동기화를 어떻게 하는지만 이해하는 것이 맞습니다.
혹시 더 궁금한게 있으면 문의해주세요.
감사합니다. 김대진 드림.
0
number: 0
number: 0
number: 0
number: 0
number: 0
number: 0
number: 0
number: 0
number: 0
number: 0
위 코드 출력 결과입니다.