2011-03-31 25 views
0

我有一个固定大小的数组(例如:struct bucket[DATASIZE]),其中最初我从一个文件加载信息。由于我担心可伸缩性和执行时间,因此不使用动态数组。同时执行2个不同的函数,是线程我的答案?

每次我处理数组的一半时,我可以自由地用文件中的更多数据替换那些点。我没有清楚的想法,我会怎么做,但我想到pthreads启动2个并行任务:一个将是实际的数据处理,另一个将确保填写数组。

但是,我在pthreads上看到的所有示例都显示它们都在处理同一个任务,但同时处理。有没有办法让他们做独立的事情?任何想法,想法?

+1

我建议你先简介...这是完全可能的,无论是读取数据或处理需要> 90%的时间,限制parallelising其他任务的利益。总是很好地知道在哪里花费时间,以便您可以针对您的优化工作。 – 2011-03-31 09:23:41

回答

2

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

+0

感谢您的提示。 – fabricemarcelin 2011-03-31 08:45:17

0

你正在做的事似乎与名为producer-consumer的标准并发程序非常相似(查找它,你一定会在pthread中找到一个例子)。这个程序有一个固定大小的缓冲区,由消费者处理并由生产者填写。

0

是的,这对于pthreads来说非常有用:它是pthreads的特性之一。

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

为什么你的数组需要互斥锁?你将如何设置它?每个进程何时需要获取互斥锁以及何时需要释放互斥锁?

- 皮特

相关问题