Skip to Content
Concurrency in C# Cookbook、第 2 版
book

Concurrency in C# Cookbook、第 2 版

by Stephen Cleary
May 2025
Intermediate to advanced
254 pages
3h 28m
Japanese
O'Reilly Media, Inc.
Content preview from Concurrency in C# Cookbook、第 2 版

第12章. 同期

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

(実質的にすべての.NETアプリケーションがそうであるように)アプリケーションで同時実行を使用する場合、あるコードがデータを更新する必要がある一方で、他のコードが同じデータにアクセスする必要がある状況に注意する必要がある。このような事態が発生した場合は、必ずデータへのアクセスを同期させる必要がある。この章のレシピは、アクセスの同期に使われる最も一般的な型をカバーしている。しかし、本書の他のレシピを適切に使えば、より一般的な同期の多くは、それぞれのライブラリがすでに行ってくれていることが発見できるだろう。同期のレシピに入る前に、同期が必要な場合とそうでない場合のよくある状況を詳しく見てみよう。

チップ

このセクションの同期の説明は若干簡略化されているが、結論はすべて正しい。

、同期には大きく分けて通信と データ保護の2種類がある。通信は、あるコード片が他のコード片に何らかの条件付き(例えば、新しいメッセージが到着したなど)を通知する必要がある場合に使用される。通信についてはこの章のレシピで詳しく説明する。

これら3つの条件がすべて当てはまる場合は、同期を使って共有データを保護する必要がある:

  • 複数のコードが同時に実行されている。

  • これらのピースは同じデータにアクセス(読み取りまたは書き込み)している。

  • 少なくとも1つのコードがデータを更新(書き込み)している。

コード全体が上から下へ実行され、同時並行的に何も起こらないのであれば、同期について心配する必要はない。これは単純なコンソール・アプリケーションの場合だが、.NETアプリケーションの大部分は何らかの並行処理を使用する。2つ目の条件付きとは、各コードが共有しない独自のローカルデータを持っている場合、同期の必要がないことを意味する。ローカルデータは他のコードからアクセスされることはない。また、データが不変性を使って定義されている場合など、共有データがあってもデータが変更されることがない場合も、同期の必要はない。3つ目の条件は、アプリケーションの開始時にセットされ、その後変更されることのない設定値などの条件付きである。共有データが読み取りだけであれば、同期の必要はない。同期が必要なのは、共有と 更新の両方が行われるデータだけだ。

データ保護の目的は、各コードにデータの一貫したビューを提供することである。あるコードがデータを更新している場合、同期を使用することで、その更新をシステムの残りの部分に対して原子性を持たせることができる。

この章のレシピを始める前に、いくつかの例を見ておこう。最初の例として、次のコードを考えてみよう:

async Task MyMethodAsync()
{
  int value = 10;
  await Task.Delay(TimeSpan.FromSeconds(1));
  value = value + 1;
  await Task.Delay(TimeSpan.FromSeconds(1));
  value = value - 1;
  await Task.Delay(TimeSpan.FromSeconds(1));
  Trace.WriteLine(value);
}

MyMethodAsync メソッドがスレッドプールスレッドから呼び出される場合(例えば、Task.Run の中から)、value にアクセスするコードの行は、別々のスレッドプールスレッドで実行されるかもしれない。しかし、同期が必要だろうか?そのどれもが同時に実行されることはないからだ。このメソッドは非同期だが、逐次的でもある(つまり、一度に1つの部分を進行させる)。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Async in C# 5.0

Async in C# 5.0

Alex Davies

Publisher Resources

ISBN: 9798341650060