4

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

                main thread
    thread_1                        thread_2

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

现在我希望 thread_2 读取 thread_1 接收到的数据并将其传输到与其连接的设备。

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

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

4

1 回答 1

8

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

有许多可能的方法来实现这一点,具体取决于上下文 - 您的帖子被标记为pthreads, 和linux-device-drivers。这是内核空间、用户空间还是内核空间 -> 用户空间?

内核空间

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

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

用户空间

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

内核空间 -> 用户空间

Linux 中使用的一般方法是让用户空间线程thread_2阻塞由 kernel-space 发出的文件系统对象thread_1。通常,有问题的归档系统对象位于/dev或中/sys。LDD3 有这两种方法的示例。

于 2012-12-03T09:23:09.120 回答