인프런 커뮤니티 질문&답변

rndstudy님의 프로필 이미지
rndstudy

작성한 질문수

[입문] Qt 6 프로그래밍 2편

Re-entrancy를 만족하는 Thread 예제 구현

'Re-entrancy를 만족하는 Thread 예제 구현' 에서 질문있습니다.

작성

·

259

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

rndstudy님의 프로필 이미지
rndstudy
질문자

number:  0
number:  0
number:  0
number:  0
number:  0
number:  0
number:  0
number:  0
number:  0
number:  0

 위 코드 출력 결과입니다.

rndstudy님의 프로필 이미지
rndstudy

작성한 질문수

질문하기