// example.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <time.h>
#include <vector>
using namespace std;
vector<int> vc;
HANDLE m_mutex;
DWORD WINAPI fun1(void* g)
{
while(1)
{
Sleep((rand()%3+1)*1000);
int x = rand()%100;
WaitForSingleObject(m_mutex, INFINITE);
vc.push_back(x);
::ReleaseMutex(m_mutex);
cout << "添加的数据为:" << x << endl;
}
return 0;
}
DWORD WINAPI fun2(void* g)
{
while(1)
{
Sleep((rand()%3+1)*1000);
WaitForSingleObject(m_mutex, INFINITE);
cout << "数组展示:";
for(auto it = vc.begin(); it != vc.end(); it++)
{
cout << *it << " " ;
}
cout << "\r\n";
::ReleaseMutex(m_mutex);
}
return 0;
}
DWORD WINAPI fun3(void* g)
{
while(1)
{
Sleep(500);
WaitForSingleObject(m_mutex, INFINITE);
if(vc.size() > 10)
{
cout << "删除的数据为:" << *(vc.begin()) << endl;
vc.erase(vc.begin());
}
::ReleaseMutex(m_mutex);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
m_mutex = ::CreateMutex(NULL, FALSE, NULL);
srand(time(0)*1000);
HANDLE _hd1 = ::CreateThread(0, 0, fun1, NULL, 0, 0); // 建立线程,线程调用fun函数
HANDLE _hd2 = ::CreateThread(0, 0, fun2, NULL, 0, 0); // 建立线程,线程调用fun函数
HANDLE _hd3 = ::CreateThread(0, 0, fun3, NULL, 0, 0); // 建立线程,线程调用fun函数
while(1);
return 0;
}
线程同步的小例子
最新推荐文章于 2021-09-22 10:31:00 发布