2010-12-01 9 views
0

pthread_create()を使用してchar *をさまざまなスレッドに渡したい場合、それらを独立して動作させて安全に行う最も簡単な方法は何ですか?スレッドと変数のコピーに関する単純な質問

は、私は私がしなければ、私は不安定な挙動を得る気づく

擬似コード:任意のデータ通信を行うための必要はありません

func1() { // part of a loop 
    Create var.. 
    func2(var); 
} 

func2(char* var) { // spawn a thread 
    pthread_create(.....,&func3,(void*)var); 
} 

func3(void* var) { 
    work with the var // unstable behavior 
} 

は、スレッドがちょうどVARを取得し、どのようなプログラムの残りの部分を無視しますやっている。彼らはちょうど彼らが持っているvarで動作します。

答えて

1

プログラムの「Create var ...」部分の詳細は表示されませんが、Christopher Huntが正しく答えたときに静的宣言されていない場合は、func1()が返されます。しかしそれよりも悪いことに、あなたは「データ通信は必要ありません」と言っていました.VARを一度作成して複数のスレッドからアクセスする場合は、あなたが意味するかどうかにかかわらず、 "データ通信" varまではあなた次第です)。

各スレッドに実際に独自のコピーを持たせたい場合は、他のスレッドを妨害することなく混乱させることができます。pthread_create()を呼び出す前に複製することができます。たとえば、strdup()を呼び出して新しいスレッドの文字列のプライベートコピーを割り当て、そのコピーをpthread_create()に渡すことができます。

0

スコープに注意する必要があります。あなたのvarがスタック上で宣言されていれば、それが完了するとそれは消えます。ヒープ上にvarを割り当てるか、静的にvarを割り当てます。