gpt4 book ai didi

c++ - 什么时候使用互斥体?

转载 作者:行者123 更新时间:2023-11-30 02:47:39 25 4
gpt4 key购买 nike

我一直在研究 gtkmm 和多线程 GUI,并且偶然发现了 mutex 的概念。从我收集到的信息来看,它的目的是为单个线程锁定对变量的访问,以避免并发问题。据我所知,这似乎很自然,但我仍然不明白应该如何以及何时使用 mutex。我见过几种用途,其中互斥量仅被锁定以访问特定变量(例如 like this tutorial )。应该为哪种类型的变量/数据使用互斥体?

PS:我找到的关于这个主题的大部分答案都相当技术性,而且由于我远不是这方面的专家,所以我更多地是在寻找一个概念性的答案。

最佳答案

如果您有从多个线程访问的数据,您可能需要一个互斥锁。你通常会看到类似的东西

theMutex.lock()
do_something_with_data()
theMutex.unlock()

或者 c++ 中更好的习语是:

{
MutexGuard m(theMutex)
do_something_with_data()
}

MutexGuard c'tor 执行 lock() 而 d'tor 执行 unlock()

这个一般规则有一些异常(exception)

  • 如果您使用的数据可以原子方式访问,则不需要锁。在 Visual Studio 中,您可以使用 InterlockedIncrement() 等函数来执行此操作。 gcc 有自己的设施来执行此操作。

  • 如果您访问数据只是为了读取它而从不更改它,那么不锁定通常是安全的。但是即使是单个线程对数据进行了任何更改,所有其他线程也需要确保它们不会在数据更改时尝试读取数据。您还可以阅读有关此类情况的读写锁。

关于c++ - 什么时候使用互斥体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584285/

25 4 0