http://blog.csdn.net/dingguozi/article/details/5965293
/*
生产者消费者线程演示
一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列
*/
#include
#include
#include
#include
#include
using namespace std;
HANDLE ghSemaphore; //信号量
const int gMax = 100; //生产(消费)总数
std::queue q; //生产入队,消费出队
//生产者线程
unsigned int __stdcall producerThread(void* pParam)
{
int n = 0;
while(++n
{
//生产
q.push(n);
cout
ReleaseSemaphore(ghSemaphore, 1, NULL); //增加信号量
Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节
}
_endthread(); //生产结束
return 0;
}
//消费者线程
unsigned int __stdcall customerThread(void* pParam)
{
int n = gMax;
while(n--)
{
WaitForSingleObject(ghSemaphore, 10000);
//消费
q.pop();
cout
Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节
}
//消费结束
CloseHandle(ghSemaphore);
cout
_endthread();
return 0;
}
void threadWorking()
{
ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步
cout
unsigned threadID;
HANDLE handles[2];
handles[0] = (HANDLE)_beginthreadex(
NULL,
0,
producerThread,
nullptr,
0,
&threadID);
handles[1] = (HANDLE)_beginthreadex(
NULL,
0,
customerThread,
nullptr,
0,
&threadID);
WaitForMultipleObjects(2, handles, TRUE, INFINITE);
}
int main()
{
threadWorking();
getchar();
return 0;
}
http://blog.csdn.net/dingguozi/article/details/5965293
/*
生产者消费者线程演示
一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列
*/
#include
#include
#include
#include
#include
using namespace std;
HANDLE ghSemaphore; //信号量
const int gMax = 100; //生产(消费)总数
std::queue q; //生产入队,消费出队
//生产者线程
unsigned int __stdcall producerThread(void* pParam)
{
int n = 0;
while(++n
{
//生产
q.push(n);
cout
ReleaseSemaphore(ghSemaphore, 1, NULL); //增加信号量
Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节
}
_endthread(); //生产结束
return 0;
}
//消费者线程
unsigned int __stdcall customerThread(void* pParam)
{
int n = gMax;
while(n--)
{
WaitForSingleObject(ghSemaphore, 10000);
//消费
q.pop();
cout
Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节
}
//消费结束
CloseHandle(ghSemaphore);
cout
_endthread();
return 0;
}
void threadWorking()
{
ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步
cout
unsigned threadID;
HANDLE handles[2];
handles[0] = (HANDLE)_beginthreadex(
NULL,
0,
producerThread,
nullptr,
0,
&threadID);
handles[1] = (HANDLE)_beginthreadex(
NULL,
0,
customerThread,
nullptr,
0,
&threadID);
WaitForMultipleObjects(2, handles, TRUE, INFINITE);
}
int main()
{
threadWorking();
getchar();
return 0;
}