我的问题很简单。 在Linux下,读写串口是否线程安全? 我可以同时从不同的线程读写吗? 甚至有可能同时做2个写入? 我不打算这样做,但这可能是其他人感兴趣的。 我只有一个读取线程和另一个写入线程。
没有什么可以find关于这个话题。
更多关于细节 – 我使用open()获得的文件描述符上的write()和read() open() ; 我正在同时这样做。
谢谢大家!
在Linux中的PHP串行通信
从用户空间读取内核驱动程序,但写回始终为0
在Windows中的串行通信 – ClearCommError在读取缓冲区中找不到数据
在Linux下使用Java RXTX与Arduino进行串行通信
发送数据到COM端口虚拟
罗埃尔
这有两个方面:
C实现的功能
内核做了什么。
关于内核,我敢肯定,它会支持这个或者提出一个相应的错误,否则这将是太容易被利用。 read()的C实现只是一个系统调用包装器(看看Linux套接字调用read之后会发生什么 ),所以这不会改变任何东西。 但是,我仍然没有看到有任何记载的保证,所以这是不可靠的。
如果你真的想要两个线程,我建议你留在stdio函数(fopen / fread / fwrite / fclose),因为在这里你可以利用这个事实,即glibc同步这些调用内部的互斥。
但是,如果你正在一个线程中进行阻塞读取,另一个线程可能被阻塞,等待写入一些东西。 这可能是一个僵局。 一个解决方案是使用select()来检测什么时候有一些数据准备好被读取或缓冲空间被写入。 尽管这是在一个单线程中完成的,但是当初始代码有点大的时候,最后这种方法更简单,更简洁,如果涉及到多个流,则更是如此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。