CLR via C# .NET 4.5
От: SanyaVB  
Дата: 22.10.13 12:06
Оценка:
В четвертом издании книги Джеффери Рихтера CLR via C# увидел интересный код(возможно он был описан и предшествующих изданиях)

    class AnotherHybridLock : IDisposable
    {
        private Int32 m_waiters = 0;
        private AutoResetEvent m_waiterLock = new AutoResetEvent(false);
        private Int32 m_spincount = 4000;
        private Int32 m_owningThreadId = 0, m_recursion = 0;

        public void Enter()
        {
            Int32 threadId = Thread.CurrentThread.ManagedThreadId;
            if (threadId == m_owningThreadId) { m_recursion++; return; }

            SpinWait spinwait = new SpinWait();

            for (Int32 spinCount = 0; spinCount < m_spincount; spinCount++)
            {
                if (Interlocked.CompareExchange(ref m_waiters, 1, 0) == 0) goto GotLock;
                spinwait.SpinOnce();
            }

            if (Interlocked.Increment(ref m_waiters) > 1) m_waiterLock.WaitOne();

            GotLock:
            m_owningThreadId = threadId; m_recursion = 1;
        }

        public void Leave()
        {
            Int32 threadId = Thread.CurrentThread.ManagedThreadId;
            if (threadId != m_owningThreadId) throw new SynchronizationLockException("Lock not owned by calling thread");
            if (--m_recursion > 0) return;
            m_owningThreadId = 0;
            if (Interlocked.Decrement(ref m_waiters) == 0) return;
            m_waiterLock.Set();
        }

        public void Dispose()
        {
            m_waiterLock.Dispose();
        }
    }


За goto руки отрывают, но Рихтер все-таки авторитет. Придется оставить жить
Re: CLR via C# .NET 4.5
От: Tom Россия http://www.RSDN.ru
Дата: 22.10.13 13:25
Оценка:
SVB>За goto руки отрывают, но Рихтер все-таки авторитет. Придется оставить жить
Вот и родилось поколение которое незнает что гото рулит
Народная мудрось
всем все никому ничего(с).
Re: CLR via C# .NET 4.5
От: mogikanin Россия  
Дата: 22.10.13 19:36
Оценка:
Здравствуйте, SanyaVB, Вы писали:
SVB>За goto руки отрывают, но Рихтер все-таки авторитет. Придется оставить жить
Кому отрывают? goto это всего навсего одна из возможностей языка. и если при помощи goto повышается читабельность кода, почему нет?
просто каждым инструментом нужно пользоваться с умом и в меру.
Re: CLR via C# .NET 4.5
От: namespace  
Дата: 22.10.13 19:50
Оценка:
SVB>В четвертом издании книги Джеффери Рихтера CLR via C#
Неожиданно, я пропустил такое событие!
Кто-нибудь прочел оба? Много в 4-м нового?

Посмотрел в 3 издании — примерно тот же код с GOTO и без пояснений отчего так.
У него в блоге забавный комментарий(2011г.):

Hey, you're the goto expert. Thanks for hnaigng out here.


PS ничего личного против го-ту не имею, но не использую в силу традиции.
Re: CLR via C# .NET 4.5
От: bessony  
Дата: 22.10.13 21:30
Оценка: :))) :)
Здравствуйте, SanyaVB, Вы писали:

Из книги Макконнелла "Совершенный код"
"Метки goto должны быть выровнены влево, состоять из заглавных букв и содержать имя программиста, его домашний телефон и номер кредитной карты."

Он там координаты не оставил?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.