我有一个固定大小的数组(例如:struct bucket[DATASIZE]
),我从一开始就从文件加载信息。由于我担心可伸缩性和执行时间,因此没有使用动态数组。
每次处理数组的一半时,我都可以自由地用文件中的更多数据替换这些点。我对如何做到这一点没有一个明确的想法,但我想到pthreads开始2个并行任务:一个是实际的数据处理,另一个是确保填写数组。
然而,我在pthreads上看到的所有示例都表明他们都在同时完成同一任务。有没有办法让他们分开做事?任何想法,想法?
答案 0 :(得分:2)
你绝对可以让线程执行不同的任务。你所追求的模式非常普遍 - 它被称为生产者 - 消费者安排。
答案 1 :(得分:0)
你要做的事情看起来非常类似于标准的并发程序,称为生产者 - 消费者(查找它,你肯定会在pthreads中找到一个例子)。该程序有一个固定大小的缓冲区,由消费者处理并由生产者填写。
答案 2 :(得分:0)
是的,这对于pthreads来说是一个很好的用途:它是pthreads的最重要的事情之一。
你可能会考虑fork()两次,一次创建进程来进行数据操作;然后是第二个fork()来创建填充空白的进程。使用互斥锁让每个进程保护数组不受其他进程的影响,并且它可以正常工作。
为什么您的阵列需要互斥锁?你会如何设置它?每个进程何时需要获取互斥锁?何时需要释放互斥锁?
- 皮特