gpt4 book ai didi

Linux/vxworks 信号

转载 作者:太空狗 更新时间:2023-10-29 11:11:02 28 4
gpt4 key购买 nike

我在 vxworks 手册中看到以下内容,想知道为什么会这样。

信号的哪些类型使它们不受欢迎?

In applications, signals are most appropriate for error and exception handling, and not for a general-purpose inter-task communication.

最佳答案

信号的主要问题是信号处理程序是在每个进程/内存空间的基础上注册的(在 vxWorks 中,内核代表一个内存空间,而每个 RTP 是不同的内存空间)。

这意味着无论线程/任务上下文如何,都将执行相同的信号处理程序(对于给定进程)。如果您的信号处理程序表现不佳,这可能会导致一些副作用问题。

例如,如果您的信号使用互斥锁来保护共享资源,这可能会导致严重的问题,或者至少会导致意外行为

  Task A                       Task B               Signal Handler  Take  Mutex   ...   Gets preempted                                 does something                                 ....                                <SIGNAL ARRIVES>----->Take Mutex  (blocks)   resumes   ....   Give Mutex                                                ----->Resumes Handler

我不确定上面的例子是否真的传达了我想要表达的意思。以下是信号的一些其他特征:

  • 在安排任务/进程之前不执行处理程序。仅仅因为您发送了信号,并不意味着处理程序会立即执行
  • 不保证哪个任务/线程将执行处理程序。进程中的任何线程/任务都可以运行它(无论哪个线程/任务先执行)。 VxWorks 有办法解决这个问题。

请注意,以上仅适用于通过 kill 调用发送的异步信号。

异常将生成一个同步信号,该信号将在当前上下文中立即执行。

关于Linux/vxworks 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5933789/

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