具有语言功能的线程特定内存

时间:2009-06-27 07:11:52

标签: multithreading memory-management language-features

是否有语言支持一个地址空间中的进程公共内存和另一个地址空间中的线程特定内存使用语言功能而不是通过函数调用等机制?

process int x;
thread int y;

3 个答案:

答案 0 :(得分:0)

Visual C ++编译器允许后者通过非标准__declspec(thread)扩展 - 但是,它受到严格限制,因为它在动态加载的DLL中不受支持。

第一个主要是通过extern声明支持 - 除非动态链接库发挥作用(这可能是您正在寻找的场景)。

我不知道有任何环境可以像你描述的那样简单。

答案 1 :(得分:0)

C#中的

ThreadStatic属性

答案 2 :(得分:0)

C ++ 0x添加了“thread_local”存储说明符,因此在命名空间(或全局)范围内,您的示例将是

int x;              // normal process-wide global variable
thread_local int y; // per-thread global variable

在函数中声明类成员或局部变量时,也可以使用thread_local和static:

class Foo {
    static thread_local int x;
};

void f() {
    static thread_local int x;
}

不幸的是,这似乎不是Visual Studio 2010或计划的GCC版本支持的C ++ 0x功能之一。