有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中

Is there any reason C++ 11+ std::mutex should be declared as a global variable instead of passed into a std::thread as a function parameter?

本文关键字:std 函数 参数传递 thread 全局变量 什么 理由 mutex 声明 C++      更新时间:2023-10-16

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

除非不是全局变量,否则使用全局变量是一种不好的做法。例如,std::cin是全局的。

从某种意义上说,互斥体是全球性的,无论您如何使其可用。它们在不同的代码段之间共享。因此,你可以将它们设为全局变量,或者你可以通过不使用它们的函数将它们传递到调用链中,直到你最终到达使用它们的人。这被称为"流浪数据",也是"不良做法"。选择你的毒药。

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

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