0
Cho mình hỏi về C# thread safe
Mình có search gg, thì có bảo rằng dùng câu lệnh: Parallel.ForEach vẫn không đảm bảo được thread safe nếu nhiều thread cùng đọc / ghi 1 data toàn cục. Và vậy mình thử làm 1 ví dụ như sau:
class A
{
public int a { get; set; } = 2;
public int Method(int input)
{
a += 2; // ghi - tăng giá trị của property a
return input + 2;
}
}
static void Main(string[] args)
{
var singetonObj = new A(); // obj toàn cục
var listThread = new List<int> { 6, 2, 8, 3, 7 }; // các thread
var listResult = new List<int>();
Parallel.ForEach(lstThread, t =>
{
lstResult.Add(singetonObj.Method(singetonObj.a + t)); // đọc - lấy giá trị của property a
});
}
Nếu theo như trên mạng nói, thì việc đọc / ghi biến a như vậy sẽ dẫn đến văng exception về thread safe, nhưng không. Kết quả là vẫn chạy bình thường, và giá trị cuối cùng của biến a == 12. Kể cả mình đổi property của a là static luôn vẫn chạy bình thường, và kết quả a == 12. Vậy tóm lại Parallel.ForEach có thread safe hay ko ?
Thêm một bình luận