https://blog.siongames.net/entry/lockcontro
マルチスレッドだと、例えばスレッドAとスレッドBが同じ変数を+1更新をかけたとき、
1.スレッドAが変数内容を読む 2.スレッドBが変数内容を読む 3.スレッドAが読んだ値+1の内容を変数に格納する 4.スレッドBが読んだ値+1の内容を変数に格納する
……という順で処理がされることがある。
この場合『2回ほど変数を+1更新する処理が実行されたのに、変数内容は+1しかされない』という動作になる。
これを防ぐために、あるスレッドからアクセスしている間は別のスレッドからの読み書きを禁止するのがlock構文。
///
/// lock()構文を使用して排他制御する
///
public class LockProcess : ProcessBase
{
private object lockObj = new object();
public override void AddProcess(int loopCount)
{
for (int i = 0; i < loopCount; ++i)
{
lock (lockObj)
{
value++;
}
}
}
}