SimpleSpinLock
От: User239 Россия  
Дата: 25.09.11 09:15
Оценка:
Читаю Рихтера, встретил в нём следующий пример:

internal struct SimpleSpinLock
{
    private Int32 m_ResourceInUse; // 0=false (default), 1=true
    public void Enter()
    {
        // Set the resource to in-use and if this thread
        // changed it from Free, then return
        while (Interlocked.Exchange(ref m_ResourceInUse, 1) != 0)
        {
            /* Black Magic goes here... */
        }
    }
    public void Leave()
    {
        // Mark the resource as Free
        Thread.VolatileWrite(ref m_ResourceInUse, 0);
    }
}

Предлагается использовать следующим образом:

public sealed class SomeResource
{
    private SimpleSpinLock m_sl = new SimpleSpinLock();
    public void AccessResource()
    {
        m_sl.Enter();
        // Only one thread at a time can get in here to access the resource...
        m_sl.Leave();
    }
}

Вопрос. Как это будет работать, если каждый раз при доступе к ресурсу создаётся новый объект SimpleSpinLock?
Ведь при создании нового объекта у него всегда будет m_ResourceInUse == 0, и никакой блокировки не произойдёт.
Наверное m_ResourceInUse должно быть статическим?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.