无锁栈实现一例 (三)

2014-11-24 02:00:37 · 作者: · 浏览: 9
return 0;
}

static void TestLockedDeque()
{
StdDeque deq_list;
DequeData* poped_dd = NULL;
HANDLE th[knThreadCount];
InitializeCriticalSectionAndSpinCount(&g_stdcs, 2000);

{
AutoHRTimer ahr(g_hrtimer, "STD push 50000");
for (int i = 0; i < knThreadCount; ++i) {
th[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)StdThreadFunc, &deq_list, 0, NULL);
} // for
::WaitForMultipleObjects(knThreadCount, th, TRUE, INFINITE);
}

{
AutoHRTimer ahr(g_hrtimer, "STD pop 5000");
for (int i = 0; i < knPopedCount; ++i) {
poped_dd = deq_list.front();
deq_list.pop_front();
delete poped_dd;
}
}

{
AutoHRTimer ahr(g_hrtimer, "STD free 45000");
StdDeque::iterator iter = deq_list.begin();
while (iter != deq_list.end()) {
DequeData* dd = *iter;
delete dd;
++iter;
}
deq_list.clear();
}

DeleteCriticalSection(&g_stdcs);
}

int main()
{
while (1) {
TestAcsDeque();
TestLockedDeque();
Sleep(3000);
fprintf(stdout, "--------------------------------------\n");
}

getchar();

return 0;
}

5. 将无锁队列同std的有锁队列进行对比,效果如下图

\