gpt4 book ai didi

c++ - 像 C# 一样在 Qt 中锁定对象

转载 作者:太空狗 更新时间:2023-10-29 21:26:55 24 4
gpt4 key购买 nike

在 C# 中,如果我有一个列表,我可以做

lock (this.mylist)
{
...
}

使用该代码,我确定在释放锁之前没有其他人可以使用该列表。这在多线程应用程序中很有用。我怎样才能在 Qt 上做同样的事情?我阅读了有关 QMutex 和 QReadWriteLock 的文档,但我不明白如何在特定对象上使用它们。

最佳答案

要使用 QMutex(或 C/C++ 中的任何标准同步方法),所有相互依赖的关键部分都必须知道互斥量。确保这一点的最简单(但不是 C++ 中的最佳实践,即使其成为类成员或其他东西)的方法是创建一个全局变量互斥体(例如,我们将这样做)。

所以考虑以下几点

QMutex mutex;

void someMethod()
{
mutex.lock();
// Critical section
mutex.unlock();
}

现在,lockunlock 是原子方法,因此在任何给定时间只有一个线程能够进入临界区。关键是两者都试图访问相同互斥体。

所以本质上,这与 C# 的工作方式相同,只是您需要自己管理互斥量。所以 lock(...) { ... } block 被替换为 mutex.lock() ... mutex.unlock()。然而,这也意味着无论何时您想要访问关键部分项(即在您的示例中,this->mylist),您都应该使用互斥体。

编辑Qt 有很好的文档。您可以在此处阅读有关 QMutex 的更多信息:http://doc.qt.io/qt-4.8/qmutex.html

关于c++ - 像 C# 一样在 Qt 中锁定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com