2017-08-15 7 views
-3

具体的には、私の場合、私はWebサーバーと、Webサーバーがページを生成するために使用するグローバルにアクセス可能な構造体を持っています。私は定期的に新しい値でその構造体を更新している別のGoroutineを持っています。これは問題を引き起こすでしょうか?それが更新されている間に読まないようにするための仕組みを実装する必要がありますか?別のゴルーチンがそれを変更している間に、あるゴルーチンが構造体から読み込むことは安全ですか?

+3

もちろん、「mutex」または「channel」を使用してください。 –

+1

関連するすべての質問に記載されているように、Goの値は並行読み込みと書き込みに対して安全ではありません。常にアクセスをシリアライズする必要があります。 – JimB

答えて

1

いいえ、それは安全ではないという定義であり、テストした場合はrace detectorにキャッチされます。たとえば、sync.Mutex or sync.RWMutexを使用して、アクセスを同期化する必要があります。

常に最新の値を保持することが重要でない場合は、各ゴルーチンに構造体のコピーをキャッシュさせ、そのコピーを「マスター」コピーから頻繁に定期的に更新することもできます。構造体に頻繁にアクセスすると、ロックの競合によるパフォーマンス上の問題を回避できます。

関連する問題