【发布时间】:2011-05-15 16:05:25
【问题描述】:
什么是现实的性能损失,因为在 C++0x 中 所有其他线程都应该 在这种情况下等待:
string& program_name() {
static string instance = "Parallel Pi";
return instance;
}
让我们假设最佳方案:程序员非常小心,即使有 100 个线程,只有 主线程 调用函数 program_name,所有其他 99 个工作线程忙于做有用的事情,不涉及调用这个“关键”函数。
我引用了新的 C++0x-Std § 6.7.(4) stmt.decl
...这样的对象在控件第一次通过其声明时被初始化...如果控件在初始化对象时同时进入声明,则并发执行应等待初始化完成...
实际编译器需要对我施加的实际开销是多少,以确保按照标准要求完成静态初始化。
- 是否需要锁/互斥锁?我认为它们很贵,即使不是真的需要?
- 如果它们很昂贵,是否会通过更便宜的机制来完成?
编辑:添加string...
【问题讨论】:
-
如果你使用单例,你就会遇到问题。这就是它的工作原理。
-
IIRC,在一个谷歌视频中,一位线程专家表示,由于采用了新算法,本地静态变量的初始化可以而且将会在严肃的 C++0x 实现中完成,而无需锁定线程安全的方式。
-
我猜你的意思是
static string instance = ...;。 -
@Johannes:你能给我指点那个谷歌视频吗?
标签: multithreading static c++11