Данные, многопоточность, синхронизация.
От: User99  
Дата: 14.02.02 13:34
Оценка:
Ситуация следующая:
Имеется массив объектов(несколько тысяч). Каждый объект находится каком-то состоянии(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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.