Вверх ↑
Разработчик
Ответов: 26324
Рейтинг: 2147
#1: 2012-02-16 12:25:20 ЛС | профиль | цитата
login писал(а):
Как поставить защиту на массив(или переменную), чтобы пока один поток в него пишет, второй подождал?

Создать критическую секцию
login писал(а):
Два потока не могут одновременно записать в один массив, будет ошибка, а прочитать они одновременно смогут?

Смогут, но при наличии кртической секции -- не смогут

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

Для ознакомления с принципами работы ПО в многопоточных системах настоятельно рекомендую почитать книгу Джеффри РИХТЕР-а "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"

В пакете Windows есть компонент критической секции -- SafeMode/ Советую ознакомиться с кодом этого компонента и принципом построения критической секции
карма: 22

1
Голосовали:login