Рефераты | Рефераты по информатике, программированию | Критические секции | страница реферата 20 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • Ну и заодно добавим еще один метод в наш класс Clock (листинг 15).

    Листинг 15. Класс CLock с новым методом.

    class CLock

    {

      friend class CScopeLock;

      CRITICAL_SECTION m_CS;

    public:

      void Init() { ::InitializeCriticalSection(&m_CS); }

      void Term() { ::DeleteCriticalSection(&m_CS); }

      void Lock() { ::EnterCriticalSection(&m_CS); }

      BOOL TryLock() { return ::TryEnterCriticalSection(&m_CS); }

      void Unlock() { ::LeaveCriticalSection(&m_CS); }

      BOOL Check() { return CheckCriticalSection(&m_CS); }

    };

    Использовать метод Check() в release-конфигурациях не стоит, возможно, что в будущем, в какой-нибудь Windows64, структура RTL_CRITICAL_SECTION изменится, и результат такой проверки будет не определен. Так что ему самое место "жить" внутри всяческих ASSERT'ов.

    Итак, что мы имеем? Мы имеем проверку на лишний вызов ::LeaveCriticalSection() и ту же трассировку для блокировок. Не так уж много. Особенно если трассировка о блокировке имеет место, а вот нить, забывшая освободить критическую секцию, давно завершилась. Как быть? Вернее, что бы еще придумать, чтобы ошибку проще было выявить? Как минимум, прикрутить сюда __LINE__ и __FILE__, константы, соответствующие текущей строке и имени файла на момент компиляции этого метода.


    Рекомендуем скачать другие рефераты по теме: реферат на экономическую тему, инновационная деятельность.



    Предыдущая страница реферата | 15  16  17  18  19  20  21  22  23  24  25 |




    Поделитесь этой записью или добавьте в закладки

       




    Категории:



    Разделы сайта




    •