Russian Qt Forum

Qt => Общие вопросы => Тема начата: AAXEE от Апрель 15, 2009, 12:11



Название: Как сделать критическую секцию?
Отправлено: AAXEE от Апрель 15, 2009, 12:11
САБЖ. Искал, искал, но не смог найти. Подскажите пожалуйста.


Название: Re: Как сделать критическую секцию?
Отправлено: lit-uriy от Апрель 15, 2009, 12:30
Если я правильно понимаю, критическая секция блокирует доступ к фрагменту кода.
в Qt используют QMutex и для удобства можно ещё QMutexLocker
см. список (http://doc.crossplatform.ru/qt/4.4.3/thread.html)


Название: Re: Как сделать критическую секцию?
Отправлено: AAXEE от Апрель 15, 2009, 13:19
Спасибо. Но не очень понятно. Если не трудно, покажите на маленьком примере
Код:
void MyThread::run()
{
//какой-то код

//Здесь нужно начать критическую секцию

//код, использующий глобальные данные

//Здесь критическая секция должна закончиться

//какой-то код

}


Название: Re: Как сделать критическую секцию?
Отправлено: lit-uriy от Апрель 15, 2009, 13:39
Код:
class MyThread....

private:
    QMutex  mutex;
Код:
void MyThread::run()
{
//какой-то код


{//Здесь нужно начать критическую секцию

QMutexLocker locker(&mutex);

//код, использующий глобальные данные

}//Здесь критическая секция должна закончиться
//какой-то код

}
, т.е. после выхода за область видимости, ограниченную фигурными скобками, объект QMutexLocker разрушится освободив мютекс.


Название: Re: Как сделать критическую секцию?
Отправлено: AAXEE от Апрель 15, 2009, 13:44
спасибо!