//************************************************************ //********功能:向线程池提交工作对象 //********做法:若线程池中有空闲线程则立即给该工作给配线程并通知处理,否则进行线程池扩容或将工作根据优先级压入相应的工作队列: 高/普通工作队列 //********参数:工作对象shared_ptr指针 //********返回值:无 //************************************************************ bool CRealThreadPool::SubmitJob(shared_ptr<CJob>& job)//提交一个工作 { if (m_IdleThread.isEmpty())//空闲线程栈为空 { if (m_ThreadNum >= m_maxThreadNum)//当前线程数大于等于最大线程数,将工作压入工作队列 { if (job->GetJobPri() == ThreadPriority::Normal) m_NormalJob.pushJob(job);//压入普通工作队列 else m_HighJob.pushJob(job);//压入高优先级工作队列 return true; } else { IncreaseCapacity();//扩容 } } CRealThread* pThread=m_IdleThread.pop();//从空闲栈取出 if (pThread == NULL)return false; m_ActiveThread.addThread(pThread);//放入活动链表 pThread->AssignJob(job);//分配任务 pThread->notifyStartJob();//开始做任务 return true; }
void Vector::InsertAt(int index, Object *o) { CheckIndex(index); if (curSize == curCap) IncreaseCapacity(); for (int i = curSize; i > index; i--) { // shift elements right elements[i] = elements[i - 1]; } // for elements[index] = o; curSize++; } // Vector::InsertAt
char* ByteBuffer::GetBuffer(int size){ pthread_mutex_lock(_mutex); if(_used+size>_capacity){ int tmp = _capacity; while(tmp<_used+size) tmp*=2; IncreaseCapacity(tmp); } char* result = _buffer+_used; _used+=size; pthread_mutex_unlock(_mutex); return result; }
void Vector::Add(Object *o) { if (curSize == curCap) // vector is full IncreaseCapacity(); elements[curSize] = o; curSize++; } // Vector::Add