Re: Дизайн пула потоков
От: Alexey Frolov Беларусь  
Дата: 28.08.09 13:09
Оценка: 1 (1)
Здравствуйте, Alu, Вы писали:

Поток не должен управлять временем жизни объекта. В общем случае (а мы говорим про пул потоков), поток не завершается а фактически выбирает из очереди очередной Irunable и вызывает метод Run и так далее пока его не остановят. А вот управлять временем жизни объекта в рамках данной реализации я вижу ровно три способа.
Первый: объект IRunable автоматический, существует глобально, уничтожается гарантированно после пула потоков, либо после того как им уже никто не пользуется, регулируется дизайном, например

{
   CSomeRunnable work;
   CThreadPool pool;
   pool.Init();
   pool.Start(&work);
   pool.Shutdown();
}


Второй: объект одноразовый, создается динамически, запускается в пул, уничтожается самостоятельно, отработав свою порцию


class CSomeRunable : public IRunable
{
   virtual void Run() 
   {
      // execute any work

      delete this;
   }
};

{
   pool.Start(new CSomeRunnable());
}



Третий: похож на второй метод за исключением того что производится подсчет ссылок и автоматическое удаление объекта произойдет тогда когда на объект больше никто не ссылается, то есть RefCount=0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.