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

标签 c multithreading shared-memory

给定以下场景:

  • 2 个线程(不多也不少)
  • 一个共享变量(比如说一个 void *)
  • 一个线程只写入一次变量(这是有保证的)
  • 另一个线程负责读取变量

让读取器线程检查变量是否为空是否线程安全?明确地在 C 程序中?

示例代码:

线程 1:

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

线程 2:

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

最佳答案

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

关于c - 仅跨 2 个线程进行 NULL 检查是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31927254/

相关文章:

c - 为什么用gcc和std=c99编译时找不到getaddrinfo

c++ - 对象在析构函数中获取互斥量以防止删除自身

c++ - 通过 Windows API 函数替换对 AfxGetInstanceHandle() 的调用

c - 安装 msys2 并运行 "pacman -Syuu"后如何解决冲突?

C:检查3位数字是否是回文数

c - 在Linux中使用管道在2个线程中增加全局变量替代方案

java - java并发编程中的 'mutable variable'这个词和函数式编程中的含义一样吗?

c - Mach 信号量是否在进程之间的共享内存中工作?

algorithm - 观测变量的设定值

c - 消息队列。 msgsend msgrcv。 C 语言中的 System V IPC 系统调用 (Linux)