c - open() 串行设备两次,用于在多线程上下文中读写

标签 c multithreading serial-port file-descriptor single-threaded

对于串行协议(protocol)栈,我将实现两个线程,一个用于读取(也可能写入)串行数据,另一个线程仅用于写入。

我想知道打开一次并在两个线程中使用文件描述符是否安全,或者最好打开两次,如下所示:

tx_fd = open("/dev/ttyS0", O_WRONLY);
rx_fd = open("/dev/ttyS0", O_RDONLY);

或者也许我应该使用不同的范例在单线程中完成所有操作。

有哪些陷阱?

最佳答案

无论哪种方式都存在“陷阱”。在单线程方法中,您可以边写边读,响应时间可能会增加一些延迟,但代码通常更简单。在多线程安排中,您可以在一个或多个线程中取得进展,而其他线程则被阻塞,并且通常可以更有效地利用现代系统,但如果任何线程必须在它们之间共享任何数据,或者需要在操作之间进行同步/协调,那么您必须诉诸使用以下一项或多项;管道、队列、锁、信号量、内存栅栏等。

关于c - open() 串行设备两次,用于在多线程上下文中读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46838184/

相关文章:

C# 计算LRC(纵向冗余检查)

c - GCC 和 Clang 之间的执行性能差距

c - 解析 CSV 并将数据存储在结构数组中?

java - 在线程中使用 Lambda

c++ - 如何在 gdb 控制台模式下捕获新线程?

linux - 在 Mono 中锁定 Linux 串行端口或其他设备

linux - 无法通过串口读取数据

c - sizeof 在宏和函数中的区别

c - 线程问题

objective-c - 在这种情况下,主队列/当前队列与主线程/后台线程之间的区别?