15,471
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <iostream>
#include <deque>
using namespace std;
CRITICAL_SECTION cs;
deque<int> g_deque;
DWORD WINAPI Worker(LPVOID lpParam)
{
//获得线程id
DWORD tid = GetCurrentThreadId();
do {
::EnterCriticalSection(&cs);
if (!g_deque.empty())
{
int val = g_deque.front();
cout << "thread " <<tid << ": got " << val << endl;
g_deque.pop_front();
}
::LeaveCriticalSection(&cs);
Sleep(100);
} while(1);
return 0;
}
int main(int argc, char* argv[])
{
::InitializeCriticalSection(&cs);
int i=0;
for(;i<2;i++)
{
CloseHandle(CreateThread(NULL, 0, Worker, NULL, 0, NULL));
}
while(cin>>i)
{
::EnterCriticalSection(&cs);
cout <<"main input " << i << endl;
g_deque.push_back(i);
::LeaveCriticalSection(&cs);
}
::DeleteCriticalSection(&cs);
return 0;
}