我的程序有两个主线程创建的线程。每个线程在连接的独立外部通信设备上运行。
main thread
thread_1 thread_2
Thread_1从外部设备接收数据包。每个数据包都是一个20字节的结构。
现在我想让thread_2读取thread_1&收到的数据。将其传输到与其连接的设备。
我们如何在两个线程之间传输数据。
在这种情况下要使用的linux变量类型的确切名称是什么?
答案 0 :(得分:8)
您的问题是Producer Consumer Problem的典型示例。
根据具体情况,有多种可能的方法可以实现这一点 - 您的帖子都标有pthreads
和linux-device-drivers
。是内核空间,用户空间还是内核空间 - >用户空间?
解决方案可能涉及环形缓冲区(如果您预计线程之间的多条消息可以同时在线)和信号量。
Linux Device Drivers 3rd Edition的第5章将是一个很好的起点。
如果两个线程都在用户空间中,则同一进程中的生产者 - 消费者模式通常使用pthread
condition variable实现。如何做到的一个有效例子是here
Linux中使用的一般方法是用户空间线程thread_2
阻止内核空间thread_1
发出信号的文件系统对象。通常,相关文件系统对象位于/dev
或/sys
。 LDD3有这两种方法的例子。