Синхронизация при доступе к данным

Тема в разделе "WASM.BEGINNERS", создана пользователем acckiitvar, 4 дек 2011.

  1. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Здравствуйте, как наиболее просто организовать доступ к глобальной переменной из двух потоков? Просто код 1 ядра написан на С, второго на ассемблере и для второго потока недопустимы функции Win32. Как их синхронизировать? Пока есть вариант только с ассемблерной вставкой:
    Код (Text):
    1. lock bts [some_adr], 1
    2. jс ...
    Грубо говоря когда 1 поток работает с переменной, второй должен ждать. Заранее спасибо.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    acckiitvar
    Если нужно что-то типа спинлока, то можно просто выдрать существующий код из Windows, например из KeAcquireSpinLock, если же поток должен спать, а не активно ждать, то придется вызывать какую-то усыпляющую ф-ию. А это уже Win32. Ну или можно Native вызвать, если позволяют условия.
     
  3. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Меня юольше интересуют варианты в принципе, я могу весь поток зациклить и пусть в цикле проверяет, просто может есть варианты которые я упускаю?
     
  4. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    не упомянули ось. по этому проще всего клиент-серверное приложение. если вынь и вам влом париться то запускайте от админа и юзайте память другого приложения напрямую.
     
  5. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    В том то и беда, я отметил уже что функции Win32 или другого API недопустимы. Можно считать что это голый дос.