Example #1
0
    void worker_proc()
    {
        Runtime rt(NULL);
        AsyncEvent *p;

        m_idleWorkers.dec();

        while (true)
        {
            if (m_idleWorkers.inc() > MAX_IDLE_WORKERS)
            {
                if (m_idleWorkers.dec() > 0)
                    break;

                m_idleWorkers.inc();
            }

            p = m_pool.get();
            if (m_idleWorkers.dec() == 0)
                if (m_idleWorkers.CompareAndSwap(0, 1) == 0)
                    new_worker();

            p->invoke();
        }
    }