用于多线程linux应用程序的信号样式IPC

时间:2012-08-27 11:11:59

标签: c++ c unix ipc rtos

我有为实时操作系统(RTOS)编写的遗留应用程序代码。大多数代码使用特定于操作系统的进程间通信(IPC)调用,看起来非常类似于信号。

它有两个IPC调用:

  • status_code signal_push(connector, event)
  • event signal_wait(connector)

我想慢慢将该应用程序移植到Linux,以改进测试和调试。

我想创建一个任务描述文件,其中包含与事件和处理程序相关的IPC基元的任务。

示例如下:

SignalHandler(connector=crypto_connector, 
              events = [(cyrpto_init, crypto_init_handler),
                        (crypto_run, crypto_run_handler),
                        (crypto_done, crypto_done_handler]) 

Task(name=crypto, priority=1, stack_size=256, connector=crypto_connector)

从这个描述文件中,它应该为每个调用相应处理程序的任务生成一个线程,该处理程序由工程师编写。它还应生成类似于emit_crypto_init()

的调用存根

我很清楚我将从RTOS的这个描述中生成什么样的代码,但我仍然不确定,我应该为Linux使用什么样的IPC。对于第一个版本,任何保持行为的东西都可以。对于未来的版本,在目标上使用Linux可能是合理的,因此IPC应该有很少的开销。

我找到了以下IPC机制:

  • Unix信号(似乎不是一个选项)
  • Unix套接字(不仅仅是发送信号)
  • 信号量(少做,但我们可以使用全局整数将事件传递给另一方)

那里有更合适的IPC解决方案,可以满足这一要求吗?

1 个答案:

答案 0 :(得分:1)

有几种可能性: