2016-12-22 6 views
0

タイトルが言うとおり。 基本的に私はatomic.StoreInt32も書き込み中に読み取り操作をロックすることでしょうか?Golang:atomic.StoreInt32を使用して1人のライターしか値を変更しない場合、複数のリーダーでatomic.LoadInt32を使用する必要がありますか?

もう1つの相対的な質問:atomic.StoreUint64(&procRate, procCount)atomic.StoreUint64(&procRate, atomic.LoadUint64(&procCount))に相当しますか?

ありがとうございます。

+0

はいこれらの型は読み取りと書き込みの両方に対して保護されています –

答えて

1

はい、同じ値を読み込んで保存する場合は、アトミック操作を使用する必要があります。レースディテクタはこれについて警告する必要があります。

2番目の質問では、procCountの値も同時に使用されている場合、依然としてアトミック操作を使用して値をロードする必要があります。

atomic.StoreUint64(&procRate, procCount) 
atomic.StoreUint64(&procRate, atomic.LoadUint64(&procCount)) 

後者は安全LoadUint64を介して得られたコピーを通過しながら、前者は、StoreUint64に渡す直接procCountを読み取り:この二つは、ない等価です。

+0

したがって、atomic.StoreIntを使用して変数に書き込むスレッドが1つだけあっても、最初の質問に対する答えはatomic.LoadIntを使用する必要がありますか? 2番目の質問に関しては、最初の行は 'procCound'を直接読み込むので、読み込み中の値が変更中である可能性があります。その時の値はナンセンスかもしれませんか? – user2828102

+0

任意のkind_の同時読み取りと書き込みがある場合、mutexまたはアトミック操作でアクセスをシリアライズする必要があります。 2番目の質問は、最初のものを再記述したものに過ぎず、結果が無意味になるように 'procCount'を修正するのは安全ではありません。 – JimB

関連する問題