首页 文章

Linux / vxworks信号

提问于
浏览
3

我在vxworks手册中遇到了以下内容,并想知道为什么会这样 .

信号做什么类型的事情会使它们变得不受欢迎?

在应用程序中,信号最适合于错误和异常处理,而不适用于通用的任务间通信 .

1 回答

  • 3

    信号的主要问题是信号处理程序是基于每个进程/内存空间注册的(在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调用发送的异步信号 .

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

相关问题