线程间数据传输 - Linux

时间:2012-12-03 08:25:37

标签: pthreads linux-device-driver embedded-linux

我的程序有两个主线程创建的线程。每个线程在连接的独立外部通信设备上运行。

                main thread
    thread_1                        thread_2

Thread_1从外部设备接收数据包。每个数据包都是一个20字节的结构。

现在我想让thread_2读取thread_1&收到的数据。将其传输到与其连接的设备。

我们如何在两个线程之间传输数据。

在这种情况下要使用的linux变量类型的确切名称是什么?

1 个答案:

答案 0 :(得分:8)

您的问题是Producer Consumer Problem的典型示例。

根据具体情况,有多种可能的方法可以实现这一点 - 您的帖子都标有pthreadslinux-device-drivers。是内核空间,用户空间还是内核空间 - >用户空间?

内核空间

解决方案可能涉及环形缓冲区(如果您预计线程之间的多条消息可以同时在线)和信号量。

Linux Device Drivers 3rd Edition的第5章将是一个很好的起点。

用户空间

如果两个线程都在用户空间中,则同一进程中的生产者 - 消费者模式通常使用pthread condition variable实现。如何做到的一个有效例子是here

内核空间 - >用户空间

Linux中使用的一般方法是用户空间线程thread_2阻止内核空间thread_1发出信号的文件系统对象。通常,相关文件系统对象位于/dev/sys。 LDD3有这两种方法的例子。