2011-03-31 62 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()創建填充空白的過程。使用互斥體讓每個進程保護陣列不受其他進程的影響,並且工作正常。

爲什麼你的數組需要互斥鎖?你將如何設置它?每個進程何時需要獲取互斥鎖以及何時需要釋放互斥鎖?

- 皮特

相關問題