挨拶!!私は、スレッド1ではPOSIXマルチスレッドアプリケーションでのLinuxで実行している交流AP、 をしました、私はこのようにグローバルなVARを設定ミューテックスを使わずにdouble varを保護する
:
スレッド2でPthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
Data1[idx].doubleval = idx * 100.0 * anothervar ;
}//for
Pthread_mutex_unlock(&Mutex1);
、私はこのようにグローバルVARにそれを得ます:
Pthread_mutex_lock(&Mutex1);
for(idx=0;idx<1000;idx++)
{
doublexxx = Data1[idx].doubleval ;
DoSomething(doublexxx) ;
}//for
Pthread_mutex_unlock(&Mutex1);
さて、スレッド2がデータ1 [33] .doubleval、意志のData1 [33]を読んでいる間、スレッド1が.doublevalのData1 [33]を設定している場合、私は、私のAPにミューテックスを使用したくないと仮定します。 doublevalは非常に奇妙な値ですか?たとえば、double varには4バイトがあり、thread1はData1 [33] .doublevalの最初の2バイトを設定し、後で2バイトは終了しません。 thread2がData1 [33] .doublevalを読み込もうとしています... 。出来ますか ?
もしこのような問題がなければ、double varを保護するにはどうすればよいですか? ミューテックスは使い方が素晴らしいですが、ダブルバリューを保護するもう1つの方法があるのだろうかと疑問に思っています thread1がそれに書き込んでいます。少なくともスレッド2は同じvarから読み込もうとします
ミューテックスを使用するだけで、あなたはそれについて心配する必要はありません。なぜあなたは不必要に問題を作り出すのですか?真に; –
;ロックしたくない場合は、スレッドを使用すべきではありません。 – tbert
おかげで、私のアプリケーションは多すぎるスレッドを使い、できるだけ早く実行したいと思いますが、mutex_lockのエフェクトのパフォーマンス、実際には小さなメモリのstrcpyブロックで使用されているすべてのミューテックスがどうなっているのか分かりませんが、それはより速く走る....すべての親切に返信いただきありがとうございます! – barfatchen