只检查2个线程的线程安全吗?

时间:2015-08-10 19:08:30

标签: c multithreading shared-memory

鉴于以下情况:

  • 2个主题(不多也不少)
  • 共享变量(假设为空*)
  • 一个线程只写一次变量(这是有保证的)
  • 另一个线程负责读取变量

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

示例代码:

主题1:

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

主题2:

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

这不是原子的。较新版本的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)

答案 2 :(得分:2)

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