Здравствуйте. С сабжем мне не приходилось иметь дело, прошу помочь определиться как сие выполнить. Есть буфер с данными, есть несколько потоков. Потоки должны изменять(процедура изменения тоже общая) эти данные. Какой тип синхронизации выбрать? То есть что выбрать мутексы, критические секции или же еще что -то? Я читал про реализацию синхронизации, но немного запутался. На данном примере надеюсь разобраться. Заранее благодарен за ответы.
критическую секцию, так как 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 }
Благодарю, очень. Сейчас попробую реализовать, может еще вопросы будут. Действительно запутался в таком многообразии способов.
..переменной. такшо критическая секция это просто обертка вокруг мутекса и работает с той же скоростью. все синхронизаторы потоков - объекты ядра. а всякие спины грузят проц. тк, в той же критической секции при отказе в допуске управление просто передается на следующий в очереди допущеный к исполнению поток. и управление на этот ждущий вернется только когда критическая секция разблокируется. так что объекты ядра как раз самое быстрое решение