Nếu một luồng A sinh ra một luồng B khác với mục đích duy nhất là ghi vào một biến V và sau đó chờ nó chấm dứt, các rào cản bộ nhớ có cần thiết để đảm bảo rằng các lần đọc tiếp theo của V trên luồng A có tươi không? Tôi không chắc chắn nếu có bất kỳ rào cản ngầm trong các hoạt động chấm dứt/tham gia mà làm cho họ thừa.Các rào cản bộ nhớ có cần thiết khi tham gia vào một chuỗi không?
Dưới đây là một ví dụ:
public static T ExecuteWithCustomStackSize<T>
(Func<T> func, int stackSize)
{
T result = default(T);
var thread = new Thread(
() =>
{
result = func();
Thread.MemoryBarrier(); // Required?
}
, stackSize);
thread.Start();
thread.Join();
Thread.MemoryBarrier(); // Required?
return result;
}
đang là một trong hai/cả hai (hoặc nhiều hơn) trong những rào cản trong đoạn mã trên yêu cầu?
Tôi nghi ngờ là rào cản bộ nhớ là bắt buộc. Nếu họ là sau đó Thread.Join sẽ là khá vô dụng và rất nhiều người sẽ gặp rắc rối. Tham gia chờ cho đến khi kết thúc chuỗi, bao gồm việc gán giá trị cho biến đó. – Despertar
Xem chủ đề này: http://stackoverflow.com/questions/6581848/memory-barrier-generators – Laurijssen