对于串行协议(protocol)栈,我将实现两个线程,一个用于读取(也可能写入)串行数据,另一个线程仅用于写入。
我想知道打开一次并在两个线程中使用文件描述符是否安全,或者最好打开两次,如下所示:
tx_fd = open("/dev/ttyS0", O_WRONLY);
rx_fd = open("/dev/ttyS0", O_RDONLY);
或者也许我应该使用不同的范例在单线程中完成所有操作。
有哪些陷阱?
最佳答案
无论哪种方式都存在“陷阱”。在单线程方法中,您可以边写边读,响应时间可能会增加一些延迟,但代码通常更简单。在多线程安排中,您可以在一个或多个线程中取得进展,而其他线程则被阻塞,并且通常可以更有效地利用现代系统,但如果任何线程必须在它们之间共享任何数据,或者需要在操作之间进行同步/协调,那么您必须诉诸使用以下一项或多项;管道、队列、锁、信号量、内存栅栏等。
关于c - open() 串行设备两次,用于在多线程上下文中读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46838184/