我想使用具有多个并发运行的进程的共享库。我的库包含UART打开/写入/读取/关闭,每个进程都写入一个特定的UART命令并期望相关的响应。应用程序调用LIB中的API,内部API打开UART端口,将命令写入UART并从UART读取响应,处理响应缓冲区并发送回用户[API需要2到3秒才能执行]。
我有30个这样的API和5个进程同时使用这些API运行。
如何在所有这些进程中提供同步,以便一次只使用一个UART,而在UART上使用所有其他块。
问候&谢谢, 阿尼尔。
答案 0 :(得分:1)
您提出了一个关于如何协调多个流程的非常笼统的问题。这是一个广泛而深刻的主题,你可以采取很多路线。以下是一些想法:
1)create a lock file in /var/lock。这适用于使用串行端口的其他程序。当一个程序完成后,其他程序将竞争创建锁定,随机的程序将获胜。
2)让您的图书馆创建shared memory segment。在共享内存段中,记下谁拥有'lock'。与锁定文件一样,您需要记下PID,因此如果所有者死亡,其他人可以窃取锁定。这具有最少的开销。
3)将串行代码拆分为“UART控制守护程序”和调用守护程序的客户端库。守护程序侦听unix套接字(或TCP / UDP或其他IPC)并专门处理串行端口。 (您可以轻松找到以任何语言编写的“聊天服务器”代码)。这有几个好处: