仅跨 2 个线程进行 NULL 检查是线程安全的吗?

Is NULL checking across ONLY 2 threads thread-safe?

给定以下场景:

让 reader 线程检查变量的 null 是否线程安全?明确地在 C 程序中?

示例代码:

线程 1:

void initOnStartup()
{
   ptr = malloc(10);
}

线程 2:

void waitingForValue()
{
  while(!ptr);
}

否,因为赋值 = 操作不是原子操作。

答案就在那里: Is changing a pointer considered an atomic action in C? 不幸的是它不是。想想 16 位 x86 平台上的远指针。

它不是原子的。较新版本的 C(和 c++)提供以下内容。 http://en.cppreference.com/w/c/atomic/atomic_store

void atomic_store( volatile A* obj , C desired); // (since C11)
void atomic_store_explicit( volatile A* obj, C desired, memory_order order ); // (since C11)