系统相关
首页 > 系统相关> > Linux / vxworks信号

Linux / vxworks信号

作者:互联网

我在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调用发送的异步信号.

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

标签:vxworks,linux,signals
来源: https://codeday.me/bug/20191208/2091426.html