【发布时间】:2012-11-12 12:15:39
【问题描述】:
AFAIK 有一些 pthread 函数充当内存屏障(例如,此处为 clarifications-on-full-memory-barriers-involved-by-pthread-mutexes)。但是编译时障碍呢,即编译器(尤其是 gcc)是否意识到这一点?
换句话说 - 例如- pthread_create() 是 gcc 不执行重新排序的原因吗?
例如在代码中:
a = 1;
pthread_create(...);
确定不会重新排序吗?
来自不同函数的调用呢:
void fun(void) {
pthread_create(...);
...
}
a = 1;
fun();
fun() 是否也编译时间障碍(假设 pthread_create() 是)?
不同翻译单元中的函数呢?
请注意,我对一般 gcc 和 pthreads 行为规范感兴趣,不一定是特定于 x86 的(关注各种不同的嵌入式平台)。
我也对其他编译器/线程库的行为不感兴趣。
【问题讨论】:
标签: gcc pthreads memory-barriers