만약 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를 좀 더 쉽게 사용할 수 있게끔해준다.