2021 시작

만약 QMutex자체를 어떻게 사용하는지 모르면은 링크를 걸어놓은 글을 먼저 보고오는것을 추천해

2021-01-22-start.tistory.com/99

 

안전하게 QMutex 쓰기

스래드를 사용하는데에 동기화를 하는것은 매우 중요하다 안그러면 공유자원을 제대로 쓰지못한다. 그래서 나온것이 동기화이다. 동기화 기법중에 하나인 mutex를 써보자 #include #include #include #in

2021-01-22-start.tistory.com

#include <QMutex>
#include <QMutexLocker>
#include <QThread>
#include <QWaitCondition>
#include <QDebug>

static int num_data;

static QMutex mutex;

static QWaitCondition wait_condition;


class MyThread1 : public QThread
{
    Q_OBJECT
private:
    void run() override
    {


        for(int i=0;i<10;i++){
            sleep(1);

            QMutexLocker locker(&mutex);    //QMutexLocker객체 생성자는 인자로 넘긴 mutex를 자동으로 lock하고
                                            //QMutexLocker객체 소멸자는 인자로 넘겼던 mutex를 자동으로 unlock한다.
\
            ++num_data;

            qDebug("Thread1 : %d",num_data);


            wait_condition.wakeAll();

        }

    }


};


class MyThread2 : public QThread
{
    Q_OBJECT
private:
    void run() override
    {
        for(int i=0;i<10;i++)
        {

            QMutexLocker locker(&mutex);//QMutexLocker객체 생성자는 인자로 넘긴 mutex를 자동으로 lock하고
                                        //QMutexLocker객체 소멸자는 인자로 넘겼던 mutex를 자동으로 unlock한다.

            wait_condition.wait(&mutex);

            qDebug("Thread2 : %d",num_data);

        }

    }
};

예제에서 보듯이 QMutexLocker는 QMutex를 좀 더 쉽게 사용할 수 있게끔해준다.

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading