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