1
我試圖重現不「保存線程」字典行爲 和實施示例(見下文)。 我期待死鎖,但測試沒有任何問題。 請你能幫我解釋一下我的測試中有什麼問題,以及如何模擬多線程字典錯誤。如何模擬「安全線程」字典行爲?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace parallelTest
{
[TestClass]
public class UnitTest1
{
Dictionary<int, string> dictionary = new Dictionary<int, string>();
[TestMethod]
public void TestMethod1()
{
dictionary[2000] = "test";
Parallel.For(0, 1000, i =>
{
string value;
dictionary.TryGetValue(2000, out value);
dictionary[2000] = String.Format("new value {0}", i);
dictionary.Add(i, String.Format("{0}", i));
Trace.WriteLine(String.Format("thread: {0}, {1}, {2}", Thread.CurrentThread.ManagedThreadId, i, value));
Thread.Sleep(100);
}
);
}
}
}
開始刪除睡眠(),但它仍然不會做你想做的。不安全 - >競賽條件 - >未定義的行爲。你可以期待各種錯誤,但沒有死鎖。 –
我開始沒有睡眠的測試:沒有任何錯誤 – constructor
我的生產代碼中有一個「死鎖」問題(看起來在Get Dictionaty中)。現在我調查這個問題。 – constructor