Синхронизация потоков

Тема в разделе "WASM.BEGINNERS", создана пользователем _Sl4yer, 22 окт 2009.

  1. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    Здравствуйте. С сабжем мне не приходилось иметь дело, прошу помочь определиться как сие выполнить.

    Есть буфер с данными, есть несколько потоков. Потоки должны изменять(процедура изменения тоже общая) эти данные. Какой тип синхронизации выбрать? То есть что выбрать мутексы, критические секции или же еще что -то?
    Я читал про реализацию синхронизации, но немного запутался. На данном примере надеюсь разобраться.
    Заранее благодарен за ответы.
     
  2. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    критическую секцию, так как

    1) тебе нужно просто защитить данные, без всяких там схем типа один пишуший много читающих и.т.д
    2) это не объект ядра, а следовательно работает быстрее. Поскольку у тебя один процесс, то в объекте ядра необходимости нет.

    Вообще читай Рихтера, там клева все написано.

    вот пример

    CRITICAL_SECTION cs_for_protect_data1;
    int data1[SIZE];

    thread () {
    EnterCriticalSection(&cs_for_protect_data1);
    change_data1();
    LeaveCriticalSection(&cs);
    }

    int main ()
    {
    InitializeCriticalSection(&cs_for_protect_data1);

    //Create threads here and wait
    }
     
  3. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    да, вместо LeaveCriticalSection(&cs) естественно LeaveCriticalSection(&cs_for_protect_data1);
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    letopisec
    нуда. в структуре критической секции сидит мутекс, вроде даже первой
     
  5. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    Благодарю, очень. Сейчас попробую реализовать, может еще вопросы будут. Действительно запутался в таком многообразии способов.
     
  6. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    ..переменной. такшо критическая секция это просто обертка вокруг мутекса и работает с той же скоростью.

    все синхронизаторы потоков - объекты ядра. а всякие спины грузят проц. тк, в той же критической секции при отказе в допуске управление просто передается на следующий в очереди допущеный к исполнению поток. и управление на этот ждущий вернется только когда критическая секция разблокируется. так что объекты ядра как раз самое быстрое решение
     
  7. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    qqwe
    Ну да все верно с учетом:

    Из Рихтера:
    что означает, что это не всегда(и не совсем) объект ядра
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    letopisec
    аж посмотрел. точно, есть там и спиннер, и ругие проверки с ускоренным выходом