同时执行2个不同的功能,pthread我的答案?

时间:2011-03-31 08:40:47

标签: c data-structures pthreads

我有一个固定大小的数组(例如:struct bucket[DATASIZE]),我从一开始就从文件加载信息。由于我担心可伸缩性和执行时间,因此没有使用动态数组。

每次处理数组的一半时,我都可以自由地用文件中的更多数据替换这些点。我对如何做到这一点没有一个明确的想法,但我想到pthreads开始2个并行任务:一个是实际的数据处理,另一个是确保填写数组。

然而,我在pthreads上看到的所有示例都表明他们都在同时完成同一任务。有没有办法让他们分开做事?任何想法,想法?

3 个答案:

答案 0 :(得分:2)

你绝对可以让线程执行不同的任务。你所追求的模式非常普遍 - 它被称为生产者 - 消费者安排。

答案 1 :(得分:0)

你要做的事情看起来非常类似于标准的并发程序,称为生产者 - 消费者(查找它,你肯定会在pthreads中找到一个例子)。该程序有一个固定大小的缓冲区,由消费者处理并由生产者填写。

答案 2 :(得分:0)

是的,这对于pthreads来说是一个很好的用途:它是pthreads的最重要的事情之一。

你可能会考虑fork()两次,一次创建进程来进行数据操作;然后是第二个fork()来创建填充空白的进程。使用互斥锁让每个进程保护数组不受其他进程的影响,并且它可以正常工作。

为什么您的阵列需要互斥锁?你会如何设置它?每个进程何时需要获取互斥锁?何时需要释放互斥锁?

- 皮特