qt多线程访问共享变量
时间: 2023-07-08 18:42:45 浏览: 83
在 Qt 中,可以使用 QMutex、QReadWriteLock 或者 QSemaphore 等多种方式保护共享变量。
其中,QMutex 是最基本的互斥锁,可以用于保护单个线程访问共享变量。使用方法如下:
```c++
QMutex mutex;
int sharedVar = 0;
void Worker::run()
{
mutex.lock();
sharedVar++;
mutex.unlock();
}
```
如果需要多个线程同时读取共享变量,可以使用 QReadWriteLock。它支持多个线程同时读取,但只允许一个线程写入。使用方法如下:
```c++
QReadWriteLock lock;
int sharedVar = 0;
void Worker::read()
{
lock.lockForRead();
int value = sharedVar;
lock.unlock();
}
void Worker::write()
{
lock.lockForWrite();
sharedVar++;
lock.unlock();
}
```
另外,如果需要控制同时访问共享变量的线程数量,可以使用 QSemaphore。使用方法如下:
```c++
QSemaphore semaphore(2); // 最多允许两个线程同时访问共享变量
int sharedVar = 0;
void Worker::run()
{
semaphore.acquire();
sharedVar++;
semaphore.release();
}
```
以上是 Qt 中常用的多线程访问共享变量的方法,具体使用时需要根据实际情况选择适合的方式。