gpt4 book ai didi

multithreading - C++0x 和静态局部变量中的性能损失?

转载 作者:行者123 更新时间:2023-12-04 10:04:13 25 4
gpt4 key购买 nike

由于在 C++0x 中所有其他线程应
在这样的情况下等待:

string& program_name() {
static string instance = "Parallel Pi";
return instance;
}

让我们假设最佳场景:程序员非常小心,即使有 100 个线程,也只有主线程调用函数 program_name ,所有其他 99 个工作线程都忙于做有用的事情,这不涉及调用这个“关键”函数。

我引用了新的 C++0x-Std § 6.7.(4) stmt.decl

...such an object is initialized the first time control passes through its declaration... If control enters the declaration concurrently while the object is being initialized, the concurrent execution shall wait for completion of the initialization...



需要真实世界的编译器强加给我以确保静态初始化按照标准的要求完成的实际开销是多少。
  • 是否需要锁/互斥锁?我认为它们很贵,即使不是真的需要?
  • 如果它们很昂贵,是否会通过更便宜的机制来完成?

  • 编辑:添加 string ...

    最佳答案

    If control enters the declaration concurrently while the object is being initialized, the concurrent execution shall wait for completion of the initialization...



    我认为在并发编程中这是合理且非常正常的事情。无论如何,这个声明并没有说所有其他线程都必须等待这个初始化。他们必须等待 万一他们需要访问初始化对象。

    Is a lock/mutex required? I assume they are expensive, even when not really needed?



    可能。互斥量/锁不是 那个实际上很昂贵,只有当锁定的代码片段需要被许多甚至所有线程频繁访问时,它们才是昂贵的。

    If they are expensive, will this be done by less expensive mechanisms?



    还有另一种基于非锁的解决方案 AFAIK。

    关于multithreading - C++0x 和静态局部变量中的性能损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009553/

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