ここにいくつかの背景があります:
リーキーバケットのようなものに使用される、goルーチン間で共有されるカウンター変数が必要です。効果的な実行の同時セクションにリーキーバケットの例があることは知っていますが、追跡する必要のある数が非常に多い可能性があり、チャネル内の要素の数を使用して追跡するのは非効率的だと感じています。そのため、異なるルーチン間で共有変数を使用して数を追跡することを検討しています。
明示的な構成がないと、すべてのgoルーチンが1つのスレッドにマップされることを理解しています。しかし、マルチコアコンピューターのプログラムに複数のスレッドを割り当てる場合、インクリメント演算子はアトミックですか?異なるマシン(、、)上の異なるデータ型(、、など)でもint32
すべて同じですか?float32
x86_32
x86_64
arm
より具体的にはcounter += 1000
、あるルーチンとcounter -= 512
別のルーチンにあり、2つのルーチンがたまたま2つのスレッドで実行されている場合はどうなりますか?スレッドの安全性について心配する必要がありますか?鍵をかけましょうcounter
か?