我在 vxworks 手册中遇到以下内容,想知道为什么会这样。
信号做了哪些类型的事情使它们不受欢迎?
在应用程序中,信号最适合错误和异常处理,而不是通用的任务间通信。
信号的主要问题是信号处理程序是在每个进程/内存空间的基础上注册的(在 vxWorks 中,内核代表一个内存空间,每个 RTP 是不同的内存空间)。
这意味着无论线程/任务上下文如何,都会执行相同的信号处理程序(对于给定进程)。如果您的信号处理程序表现不佳,这可能会导致一些副作用问题。
例如,如果您的信号使用互斥锁来保护共享资源,这可能会导致令人讨厌的问题,或者至少会导致意外行为
任务 A 任务 B 信号处理程序 采取互斥体 ... 被抢占 做某事 …… <SIGNAL ARRIVES>----->取 Mutex(块) 简历 …… 给互斥体 ----->简历处理程序
我不确定上面的例子是否真的传达了我想要表达的意思。以下是信号的一些其他特征:
请注意,上述内容仅适用于通过 kill 调用发送的异步信号。
异常将生成一个同步信号,该信号将在当前上下文中立即执行。