Tôi có lớp tĩnh này chứa một biến tĩnh (một int đơn giản). Tôi đã thực hiện một lock()
trong phương pháp Run()
của chủ đề, vì vậy không đề khác có thể truy cập vào lớp này đồng thời, nhưng biến vẫn đi điên, hiển thị bản sao, vô cùng giá trị cao vvCách tạo một biến tĩnh an toàn
Đây là lớp học:
public static class ExplorationManager
{
public static int Counter = 0;
public static void ExplorerMaker(List<int[]> validPaths, List<string> myParents, string[,] myExplorationMap, List<int[]> myPositions)
{
foreach (var thread in validPaths.Select
(path => new Explorer(myParents, path, myExplorationMap, myPositions)).
Select(explorer => new Thread(explorer.Explore)))
{
thread.Name = "Thread of " + Counter + " generation";
Counter++;
thread.Start();
}
}
}
có cách nào để làm cho biến này "nhiều hơn" thread-an toàn không?
_goes điên, hiển thị trùng lặp, giá trị điên rồ cao_ - không thực sự giải thích được từ mã này. –