我想知道我是否可以使用带有API semaphore.h的C ++编程的Linux操作系统的信号量和互斥量。
我还没有处于代码开发/编写阶段,但目标是在接收器上读出一个以115,200的波特率发送异步二进制数据的接收器。然后,必须尽快将此数据中继到调制解调器中。
我正在考虑使用RTOS,但我不了解引导程序以及如何在芯片或嵌入式环境中使用Linux或任何其他操作系统。
是否可以在信号和管道互连的单独线程中编写这些读写函数,并增加信号量?
当我必须以另一种格式格式化接收的数据,仅解析所需的字符串或必须以数学方式修改它们时,可能需要信号量。在发送之前。
使用非RTOS时是否可以获得信号量的好处?我只看到这些与RTOS合作应用。
答案 0 :(得分:0)
POSIX semaphores与多线程Linux应用程序中的同步关系不大。
答案 1 :(得分:0)
将115200视为波特率意味着 - 这是每秒11520个字符(假设为8N1)或每个字符大约86.8个usec。现在Linux操作系统对于实时来说是一件多变的事情,但我们肯定不会在大约1毫秒的粒度上遇到麻烦,假设我们有一个1000hz的内核,大约是11.5倍 - 如果你设置了你的调度。此外 - 在某种程度上,这是最坏的情况延迟 - 字符的批处理写入将具有几乎完美的字符到字符延迟,假设您可以保持传出缓冲区填充。
现在回答这个问题:您的申请可以容忍什么?根据答案,您将不得不考虑不同的东西 - 从用于Linux的实时补丁到混合Xenomai / RTAI到完整的RTOS,如RTEMS。根据我目前对您情况的了解,我说它可能足以使用1000hz内核。
linux串行文件描述符可以同时在不同的线程中写入和读取,没有任何问题。只要您的处理很轻,您就可以将这些任务分离到不同的线程或使用非阻塞IO来换取无意义的延迟 - 这可以避免上下文切换,这很好,因为它们很慢。换句话说,如果使用线程或非阻塞模式,则不需要引入信号量。
最后 - 信号量实际上是所有操作系统的