2017-06-02 10 views
-1

私のC++はかなり基本的なもので、これは初めてのマルチスレッドコードです。 私のデータセットは非常に大きいと私は、私はいくつかの機能を分離することで時間を短縮できると思っています。以下に擬似コードで描かれているのは、私が望むものの一般的な考え方です。C++で2つのプロセスを実行し、それらが終了するのを待ちます

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. 
} 

ここでの再帰呼び出しは、ここで私の問題になる可能性があります。 2つのプロセスがコンビネーションを実行するために最初のイテレーションを完了し、次にそれを再度実行する必要がある場所を実装する簡単な方法はありますか?

+0

ああ、このコードではSIMDが大変だからね...。 – iehrlich

答えて

4

processesの2つが実行されていますが、2つのスレッドが実行されていません。

プロセスは、ほとんど定義上、独自のvirtual address spaceを持っています。したがって、2つの異なるプロセスは、特定の手順なしでメモリを共有することはできません(Linuxでは、mmap(2) & shm_overview(7)を参照)。プロセスは、すべて同じ仮想アドレス空間を共有する複数のスレッドを持つことができます。各スレッドは、その仮想アドレス空間に独自のcall stackを持っています。

このpthread tutorialあなたはおそらくあなたがについてsynchronizationを気にしなければならないので、condition variablesmutexesについての詳細を学びたい

(あなたが簡単C++11 threadsに適応することができます)P-スレッドに関する興味深い概念を教えています。

+0

今は読んでいるけど、思ったよりずっと複雑です。私に正しい方向を指してくれてありがとう –

3

2つのプロセスが最初の繰り返しを完了してコンビネーションを実行する必要がある場合は、実装する簡単な方法はありますか?

シグナル。シグナル上でスレッドが待機するようにします。 condition variablesとも呼ばれます。 (Posix

には、マルチバスが標準であるを覚えておく必要があります。

Strategized Locking, Thread-safe Interface, and scoped Locking

Atomicity Policies using Design Patternsを(同時キューを記述する)

Half-Sync/Half-ASync(生産者/消費者を説明し、/書き込みポリシーを読んで)。

関連する問題