Класс QRecursiveMutex
Класс QRecursiveMutex обеспечивает сериализацию доступа между потоками. Подробнее...
| Заголовок: | #include <QRecursiveMutex> |
| qmake: | QT += core |
| С тех пор: | Qt 5.14 |
| Наследует: | QMutex (приватный) |
Этот класс был представлен в Qt 5.14.
Примечание: Все функции в этом классе являются безопасными для потоков.
Публичные функции
| QRecursiveMutex() | |
| ~QRecursiveMutex() |
Подробное описание
Класс QRecursiveMutex — это мьютекс, аналогичный QMutex, с которым он совместим по API. Он отличается от QMutex тем, что принимает вызовы lock() из одного и того же потока любое количество раз. QMutex в этой ситуации приведет к тупиковой ситуации.
QRecursiveMutex гораздо дороже в создании и работе, поэтому используйте обычный QMutex всякий раз, когда это возможно. Иногда, однако, одна публичная функция вызывает другую публичную функцию, и обеим из них нужен один и тот же мьютекс. В этом случае у вас есть два варианта:
- Разделите код, требующий защиты мьютексом, на частные функции, которые предполагают, что мьютекс захвачен при вызове, и заблокируйте обычный QMutex в публичных функциях перед вызовом частных функций.
- Или используйте рекурсивный мьютекс, поэтому не важно, что первая публичная функция уже заблокировала мьютекс, когда вторая хочет сделать то же самое.
См. также QMutex, QMutexLocker, QReadWriteLock, QSemaphore и QWaitCondition.
Документация по функциям-членам
QRecursiveMutex::QRecursiveMutex()
Создает новый рекурсивный мьютекс. Мьютекс создается в разблокированном состоянии.
QRecursiveMutex::~QRecursiveMutex()
Уничтожает мьютекс.
Предупреждение: Уничтожение заблокированного мьютекса может привести к неопределенному поведению.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qrecursivemutex.html