History

replacement of std::list for m_cBusyThreads https://rbcommons.com/s/OpenH264/r/1320/

Sijia Chen committed 11 years ago

Commit a3f606e1 parent bc566f07 files · +475 −33Browse files

Showing the changes to codec/common/src/WelsThreadPool.cpp (1 of 7 files). Show all

Unified · Split

codec/common/src/WelsThreadPool.cpp+11−26
@@ -52,6 +52,7 @@ CWelsThreadPool::CWelsThreadPool (IWelsThreadPoolSink* pSink, int32_t iMaxThread · 51 unmodified lines
52 m_pSink (pSink) {52 m_pSink (pSink) {
53 m_cWaitedTasks = new CWelsCircleQueue<IWelsTask>();53 m_cWaitedTasks = new CWelsCircleQueue<IWelsTask>();
54 m_cIdleThreads = new CWelsCircleQueue<CWelsTaskThread>();54 m_cIdleThreads = new CWelsCircleQueue<CWelsTaskThread>();
55 m_cBusyThreads = new CWelsList<CWelsTaskThread>();
55 m_iMaxThreadNum = 0;56 m_iMaxThreadNum = 0;
56 57
57 Init (iMaxThreadNum);58 Init (iMaxThreadNum);
@@ -63,16 +64,17 @@ CWelsThreadPool::~CWelsThreadPool() { · 5 unmodified lines
63 64
64 delete m_cWaitedTasks;65 delete m_cWaitedTasks;
65 delete m_cIdleThreads;66 delete m_cIdleThreads;
67 delete m_cBusyThreads;
66}68}
67 69
68WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) {70WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStart (CWelsTaskThread* pThread, IWelsTask* pTask) {
69 AddThreadToBusyMap (pThread);71 AddThreadToBusyList (pThread);
70 72
71 return WELS_THREAD_ERROR_OK;73 return WELS_THREAD_ERROR_OK;
72}74}
73 75
74WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IWelsTask* pTask) {76WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IWelsTask* pTask) {
75 RemoveThreadFromBusyMap (pThread);77 RemoveThreadFromBusyList (pThread);
76 AddThreadToIdleQueue (pThread);78 AddThreadToIdleQueue (pThread);
77 79
78 if (m_pSink) {80 if (m_pSink) {
@@ -198,36 +200,19 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToIdleQueue (CWelsTaskThread* p · 119 unmodified lines
198 return WELS_THREAD_ERROR_OK;200 return WELS_THREAD_ERROR_OK;
199}201}
200 202
201WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToBusyMap (CWelsTaskThread* pThread) {203WELS_THREAD_ERROR_CODE CWelsThreadPool::AddThreadToBusyList (CWelsTaskThread* pThread) {
202 CWelsAutoLock cLock (m_cLockBusyTasks);204 CWelsAutoLock cLock (m_cLockBusyTasks);
203 205 m_cBusyThreads->push_back (pThread);
204 uintptr_t id = pThread->GetID();
205
206 std::map<uintptr_t, CWelsTaskThread*>::iterator iter = m_cBusyThreads.find (id);
207
208 if (iter != m_cBusyThreads.end()) {
209 return WELS_THREAD_ERROR_GENERAL;
210 }
211
212 m_cBusyThreads[id] = pThread;
213
214 return WELS_THREAD_ERROR_OK;206 return WELS_THREAD_ERROR_OK;
215}207}
216 208
217WELS_THREAD_ERROR_CODE CWelsThreadPool::RemoveThreadFromBusyMap (CWelsTaskThread* pThread) {209WELS_THREAD_ERROR_CODE CWelsThreadPool::RemoveThreadFromBusyList (CWelsTaskThread* pThread) {
218 CWelsAutoLock cLock (m_cLockBusyTasks);210 CWelsAutoLock cLock (m_cLockBusyTasks);
219 211 if (m_cBusyThreads->erase(pThread)) {
220 uintptr_t id = pThread->GetID();212 return WELS_THREAD_ERROR_OK;
221
222 std::map<uintptr_t, CWelsTaskThread*>::iterator iter = m_cBusyThreads.find (id);
223
224 if (iter != m_cBusyThreads.end()) {
225 m_cBusyThreads.erase (iter);
226 } else {213 } else {
227 return WELS_THREAD_ERROR_GENERAL;214 return WELS_THREAD_ERROR_GENERAL;
228 }215 }
229
230 return WELS_THREAD_ERROR_OK;
231}216}
232 217
233void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) {218void CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) {
@@ -250,7 +235,7 @@ CWelsTaskThread* CWelsThreadPool::GetIdleThread() { · 16 unmodified lines
250}235}
251 236
252int32_t CWelsThreadPool::GetBusyThreadNum() {237int32_t CWelsThreadPool::GetBusyThreadNum() {
253 return static_cast<int32_t> (m_cBusyThreads.size());238 return static_cast<int32_t> (m_cBusyThreads->size());
254}239}
255 240
256int32_t CWelsThreadPool::GetIdleThreadNum() {241int32_t CWelsThreadPool::GetIdleThreadNum() {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t