redisがシングルスレッドサーバーの場合、結果は100000ではないのはなぜですか?私はそれが赤目の問題ではないと思うが、理由を知りたい。ありがとう。redisで非同期問題が発生する
RedisConnection.Default.Database.StringSet("mykey1", 0);
Parallel.For(0, 50000, new ParallelOptions { MaxDegreeOfParallelism = 2 }, (i) =>
{
var number = RedisConnection.Default.Database.StringGet("mykey1");
int result = int.Parse(number);
RedisConnection.Default.Database.StringSet("mykey1", result + 1);
});
Console.WriteLine("Result" + RedisConnection.Default.Database.StringGet("mykey1"));
あなたの操作は[原子](HTTPSではありません。 org/wiki/Atomicity_(データベースシステム))。それは赤字のせいではない。あなたのコードはスレッドセーフではありません。つまり、2つのスレッドは同じ値を読み取ることができます。そして、もちろん、彼らは同じ価値を書くでしょう。必要な動作を得るには、一度に1つのスレッドだけが読み取りと書き込みの1サイクルを実行できるようにする必要があります。 – Fildor
この特定のケースでは、それはParallelの使用をかなり役に立たなくするでしょう。 – Fildor
ありがとうございます。 2スレッドは同じ値を読み取ることができます! –