13

我见过大多数使用std::mutex互斥锁是全局的例子。我想知道这样做有什么具体原因吗?我有自己的程序,但我不这样做,只需将互斥锁作为std::thread std::ref. 拥有全局变量不是不好的做法,std::mutexes如果没有语言限制这样做的理由,C++ 中全局变量背后的原因是什么?

4

2 回答 2

9

拥有全局变量是不好的做法,除非没有全局变量。例如,std::cin是全局的。

互斥体在某种意义上是全球性的,无论您如何使它们可用。它们在不同的代码段之间共享。所以你可以让它们成为全局的,或者你可以通过不使用它们的函数将它们传递到调用链中,直到你最终到达使用它们的人。这就是所谓的“流浪数据”,也是“坏习惯”。选择你的毒药。

于 2017-07-05T17:52:41.103 回答
1

这样做很可能是为了使示例更易于理解,允许使用互斥锁本身成为示例的重点,而不是具体细节。

通常,互斥锁保护资源,在许多情况下,互斥锁与资源一起存在是有意义的。例如,如果您有一个包含需要由互斥锁保护的成员容器的类,则使互斥锁也成为该类的成员。然后,当类实例由多个线程作用时,成员互斥锁可用于保护对内部容器的所需访问。

于 2017-07-07T14:26:16.017 回答