Gần đây tôi đã thấy mã này trong một trang web, và câu hỏi của tôi là như sau:Khóa một biến bool đơn khi đa luồng?
private bool mbTestFinished = false;
private bool IsFinished()
{
lock(mLock)
{
return mbTestFinished;
}
}
internal void SetFinished()
{
lock(mLock)
{
mbTestFinished = true;
}
}
Trong một môi trường đa luồng, là thực sự cần thiết để khóa truy cập vào các mbTestFinished
?
Đây là cơ chế đáng tin cậy nhất để đảm bảo nó không phải là đọc CPU được lưu trữ (sẽ không hoạt động tốt giữa các luồng) - 'volatile' cũng sẽ hoạt động, nhưng vì lý do quá phức tạp (đây không phải là * intent * của 'volatile', nhưng đúng hơn là: tác dụng phụ) –
@MarcGravell Tôi đã luôn luôn nghĩ rằng _was_ ý định của 'biến động'; bất kỳ cơ hội bạn có thể thả một liên kết tốt giải thích những gì là? –
@romkyns: [answer] (http://stackoverflow.com/a/4103879/158779) cung cấp một số thông tin chi tiết. –