Tôi chỉ tự hỏi liệu mã này mà một nhà phát triển đồng nghiệp (người đã rời khỏi) là OK, tôi nghĩ rằng ông muốn tránh đặt một khóa. Có một sự khác biệt hiệu suất giữa điều này và chỉ sử dụng một khóa thẳng về phía trước?Lồng vào nhau được sử dụng để tăng/mimick một boolean, điều này có an toàn không?
private long m_LayoutSuspended = 0;
public void SuspendLayout()
{
Interlocked.Exchange(ref m_LayoutSuspended, 1);
}
public void ResumeLayout()
{
Interlocked.Exchange(ref m_LayoutSuspended, 0);
}
public bool IsLayoutSuspended
{
get { return Interlocked.Read(ref m_LayoutSuspended) != 1; }
}
Tôi đã nghĩ rằng điều gì đó như thế sẽ dễ dàng hơn với khóa? Nó thực sự sẽ được sử dụng bởi nhiều chủ đề, do đó tại sao việc sử dụng khóa/lồng vào nhau đã được quyết định.
@Jon: Tôi tò mò, bạn có thể xây dựng trên "biến động không có nghĩa là hoàn toàn những gì tôi nghĩ rằng nó đã làm"? – LukeH
@Luke: Tôi đang lên kế hoạch xây dựng chi tiết về bài đăng trên blog tại một số thời điểm, nhưng http://www.bluebytesoftware.com/blog/2008/06/13/VolatileReadsAndWritesAndTimeliness.aspx là phần lớn trong số đó. –
Chỉ cần nhấn mạnh, độ dài dễ bay hơi sẽ không ** an toàn (trên hệ thống 32 bit). –