我正在尝试找到 C++11 临界区的等效项,新的 C++11 互斥量概念是否受进程限制(例如,仅在用户空间上强制执行互斥量)?也许它是特定于实现的,因为我找不到任何特定的内容。也许 C++11 有自己的临界区类,因为互斥体是跨进程的,对吧?请帮忙。
标准库实现可以自由使用它喜欢的任何满足标准中规定的要求和行为的互斥体实现。提供跨进程锁定(标准不要求)的实现可能会比不提供跨进程锁定的实现性能更低。因此,高质量的实现很可能会提供进程本地互斥体(mutices?)。
因此,尽管人们可以使用命名信号量等方式推出 C++11 互斥体的一致实现,但很难将该实现出售给用户。据我所知,不存在提供跨进程锁定的流行实现
std::mutex
。
C++ 标准仅涉及单个程序,因此单个 过程;它没有提及外部发生的事情 过程。 至少在某些 Posix 实现下,有一些“互斥体” 是跨进程的,因此在它们下,任何 C++ 互斥体也将是 跨进程。 在其他系统下,这可能取决于 系统。
另外:在用户空间实现互斥体并不意味着它 不能跨进程,因为用户空间可以包含共享空间 内存或
mmap
ed 空间,可从多个
流程。
你可以这样实现:
static void fn()
{
static std::mutex criticalSection;
std::lock_guard<std::mutex> lockMySection(criticalSection);
// now safely in a "critical section"
}