Critical Section

Тема в разделе "WASM.WIN32", создана пользователем dr_dred, 18 июн 2005.

  1. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Мне ххотелось бы узнать что-нибудь о функциях, названия которых оканчиваются на CriticalSection. Для чего они, как и когда их использовать? Можно небольшие примерчики.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    shoo

    А еще есть в книге Рихтера "Создание Win32 эффективный приложений ..." . С примерами кода.
     
  4. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    shoo

    Там комментариев 0. Хотелось бы что бы все толком объяснили.

    TermoSINteZ

    Если в интернете нет, покупать я ее не буду, так как о CriticalSection мне нужно узнать пока только основное.
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    толково объяснять некогда, но, может, этого окажется достаточно:


    Код (Text):
    1. stCS        CRITICAL_SECTION {?} ; структура для данных секции
    2.  
    3. Arp_IP2MAC proc dwIpaddr:DWORD ; процедура потока
    4.     ...
    5.     invoke EnterCriticalSection,ADDR stCS
    6.     ...    ; код, расположенный здесь,
    7.     ...    ; выполняется для каждого потока отдельно
    8.     ...    ; или, правильней, "неодновременно" -
    9.     ...    ; пока один выполняет - остальные ждут
    10.     invoke LeaveCriticalSection,ADDR stCS
    11.     ...
    12.     invoke ExitThread,0
    13. Arp_IP2MAC endp
    14.  
    15. getMAC proc lhwnd:DWORD
    16.     ...
    17.     ; создаем секцию (до начала работы потоков)
    18.     invoke InitializeCriticalSection,ADDR stCS
    19.         ...
    20.         ; создаем в цикле несколько потоков
    21.         invoke CreateThread,...
    22.         ...
    23.     ; удаляем секцию (работа потоков закончена)
    24.     invoke DeleteCriticalSection,ADDR stCS
    25.     ...
    26.     invoke ExitThread,0
    27. getMAC endp
     
  6. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    TermoSINteZ

    книг у меня нет
     
  7. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    если коротко - то эти функции используются для синхронизации потоков то есть избежания одновременного изменения неатомарных данных

    1.)поток вызывающий EnterCriticalSection первым - выполняется

    2.) второй поток, вызывает ту же функцию и и она не возвращается до тех пор, пока первый не вызовет leavecriticalsection





    note

    прежде чем использовать cs должна быть создана InitializeCriticalSection



    потоков может быть не два а сколько угодно (в пределах ограничений ос)



    используется это для того , чтобы , например разные потоки в одно и то же время не read/write одно и ту же структуру данных. что в многопоточной среде может привести к повреждению данных
     
  8. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Чем же это выгодней объекта Mutex? И при чем здесь ..Section?
     
  9. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    dr_dred

    Объект Mutex больше подходит для синхронизации потоков принадлежащих разным процессам. Критические секции предназначены для синхронизации потоков работающих внутри одного процесса. Синхронизация с помощью критических секций требует меньше накладных расходов, т.е. работает быстрее.
     
  10. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    dr_dred

    like it said :

    Enter(ing) Critical Section(of code wich will be guarded up until we Leav[ing this] Critical Section of code)



    или ты думаешь что слово section имеет какое-то значение раз и на всегда утверждённое?
     
  11. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Все понял, всем спасибо.