Глобальная переменная в SEH

Тема в разделе "WASM.NT.KERNEL", создана пользователем 0x56, 16 мар 2008.

  1. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    Где-то видел такую фразу на форуме: "Страшно, когда разработчики драйверов рассуждают о вероятности падения системы".
    И все же новичкам простительно :)

    Меня интересует вопрос спасёт ли try - except например на 2-х ядерной машине при одновременном чтении-записи в глобальной переменной из разных потоков?

    В драйвере используется глобальная переменнная типа BOOLEAN.
    Она довольно часто проверяется в других потоках, но меняет своё значение только 1 раз в другом потоке.
    Спрашивается имеет ли смысл читать и писать в эту переменную в блоках SEH.
    Или всё же делать критическую секцию?
     
  2. DriversDeveloper

    DriversDeveloper Виктор Фисюк

    Публикаций:
    0
    Регистрация:
    15 мар 2008
    Сообщения:
    6
    Адрес:
    Kiev, Ukraine
    Не совсем понятно от чего try - except будет спасать :). Он используеться, когда может возникнуть исключение. Но при чтении валидной области памяти (какой является своя переменная) никаких исключений не будет, даже если ее одновременно читают и изменяют несколько потоков.

    Для синхронизации совместно используемых данных надо использовать соответствующие синхронизационные примитивы, а не try - except . Например, в случае одной переменной типа BOOLEAN можно использовать InterlockedXXX функции.
     
  3. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    DriversDeveloper надо же :)
    я всегда думал что бяка будет
    таким образом для BOOLEAN можно вообще ничего не делать
    это ведь не какая-то строка например, которая может неправильно интерпретироваться при одноврменном чтении-записи
     
  4. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    А разве не возникнет никакого исключение если в одно и тоже время один поток будет писать а другой читать ячейку памяти?
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Исключения то не будет, но а если "ячейка памяти" большая (многобайтовая)... то синхронизации не избежать
     
  7. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    asmfan
    Да даже если однобайтовая. Все равно есть вероятность, что 2 потока обратятся к ней одновременно, на многопроцессорных машинах
    1 поток считал число а другой в это же время записал. Первый поток, вернет новое или старое значение ??? Я считаю, что синхронизация нужна даже в таком случае (да хотя бы XCHG)
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    TermoSINteZ
    Вернёт то которое валидное на момент чтения. Никто ж не говорит про последующие исполняемые инструкции, а только про операции чтение/запись. если чтение/запись+модификация/сравнение то тут надо атомарность включать, а чтение/запись уже атомарны в пределах размеров регистров (насчёт xmm не уверен, если ширина шины меньше). В общем не всё так гладко и ясно.

    +в note'ах от интела интересно сказано, что lock может появиться внутренне сам по себе в последних процессорах. +просто лочится кэш-линия... уффф... условностей сколько.
    Хорошо бы чтобы кто-нить чуток прояснил вопрос (даже если и в -надцатый раз:).
     
  9. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    asmfan
    Да, я как раз и имел ввиду дальнейшую логику работы программы... в этом самая большая проблема синхронизации в многопоточных и многопроцессорынх средах. Представте какие будут поледствия, при реализации критических секций. В науке, помимо проблемы рассогласованности (про больших объемах данных), есть еще "проблема тупиков".