gpt4 book ai didi

c - 更新信号处理程序中的全局变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:13 30 4
gpt4 key购买 nike

全局变量不会在信号处理程序中更新,除非像 sig_atomic_t 这样的原子类型。给定以下两个条件,我可以安全地在信号处理程序中编辑全局变量吗?

  1. 如果我只定义一个信号处理器
  2. 如果我使用 struct sigactionsa_mask 来阻止处理程序的所有信号
  3. 应用程序是单线程的

添加更多细节:我有一个小的全局链表,其中保存了它的子进程的一些信息。一旦我捕捉到 SIGCHLD(在父进程中),我想在我的信号处理程序中从链表中删除该节点。我可以在具有上述条件的信号处理程序中执行此操作并使用某种 pthread_mutex_trylock() 吗?

最佳答案

信号处理程序在访问静态数据结构时存在问题。由此,您可以获得损坏的数据等。如果您尝试在信号处理程序中调用 printf(),很多时候您会得到奇怪的输出。

除非您使用原子类型,否则全局变量也是如此。

Signal handler won't see global variable

关于c - 更新信号处理程序中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232212/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com