Ситуация следующая:
Имеется массив объектов(несколько тысяч). Каждый объект находится каком-то состоянии(3-10 состояний),
3 рабочих потока пользуются этим массивом. Каждый рабочий может смотреть и изменять
состояния объектов. +Имеется еще и интерфейсный поток(пока только просмотр состояний
объектов). Разумеется необходима синхронизация.
1.Одна Критическая секция для всего массива.
Минусы — читает только один все остальные ждут.
2.Два события для всего массива (одно для читателей другое для писателей) читают все одновременно,
пишет только 1.
Минусы — Пишущий поток по прежнему блокирует массив.
3. Вариант 2, но для каждого экземпляра.
Помоему так недьзя(количество HANDLOV у ОС конечно).
4.
class O
{
public:
//какие-то данные
protected:
bool m_bRead;
bool m_bWrite;
static HANDLE m_Update;
public:
LockRead()
{
for(;m_bRead;)//пока занято
{
WaitForSingleObject(m_Update,-1);
ResetEvent(m_Update);
}
m_bRead=true;
}
UnLockRead()
{
m_bRead=false;
SetEvent(m_Update);
}
//Для записи аналогично
}
vector<O> vO;
Ваше мнение по поводу всего этого. Повторюсь размер массива 1000-60000;