2017-06-02 101 views
-1

我的C++非常基礎,這是我第一次嘗試多線程代碼。 所以我的數據集相當大我認爲我可以通過分離一些功能來縮短時間。在僞代碼中描述的是我想要的一般概念。在C++中運行兩個進程並等待它們完成

int main(){ 

    process1(); 
    process2(); 

} 

process1(){ 
    base value for recursion 
    Builds a forward array 
    Once complete - run function combination(); 
    Recursive call 
} 

process2(){ 
    base value for recursion 
    Builds backwards array 
    Once complete - run function combination(); 
    Recursive call 
} 

combination(){ 
    when both functions are complete. 
    if functions return null then the array is complete 
    else add results into a new array. 
} 

遞歸調用是我可能在這裏遇到的難題。是否有一種簡單的方法來實現兩個流程必須完成第一次迭代才能運行組合並再次通過它的地方?

+0

哦,這個代碼希望SIMD這麼難.... – iehrlich

回答

4

這是不運行兩個processes但運行兩個線程

一個過程幾乎根據定義,它自己的virtual address space。因此,如果沒有特定步驟,兩個不同的進程不能共享內存(在Linux上,請參閱mmap(2) & shm_overview(7))。一個進程可以有幾個線程共享相同的虛擬地址空間,每個線程在該虛擬地址空間中都有自己的call stack

pthread tutorial講授P-線程有趣的概念(你可以很容易地適應C++11 threads

你可能想了解更多關於condition variablesmutexes,因爲你應該關心synchronization

+0

是的,我現在正在閱讀,比我想象的要複雜得多。感謝您指點我正確的方向 –

3

有沒有簡單的方法來實現兩個進程必須完成他們的第一次迭代運行組合,然後再次通過它?

一個信號。你想要一個線程等待一個信號。也叫condition variables。 (Posix

有很多多線程資源和它的技術,你應該肯定會學習(多核心標準這些天)。

Strategized Locking, Thread-safe Interface, and scoped Locking

Half-Sync/Half-ASync(描述併發隊列)

Atomicity Policies using Design Patterns(描述生產者/消費者,讀/寫策略)。

相關問題