在多线程编程中线程的执行没有先后顺序,有的时候需要对数据按照一定的顺序进行执行,执行的方式有临界区(Critiacal section),互斥量(mutex),事件(event),信号量(semaphsore)等方式可以实现,但互斥量会初始化一系列资源,通常不作为数据哦同步的方式。
在不行数据同步的情况下,代码和执行结果如下`:
#include<Windows.h>
#include<process.h>
#include<iostream>
using namespace std;
HANDLE hEvent{ 0 };
int m = 0;
unsigned int StartAddress(void* )
{
while (true)
{
cout << "Second thread"<<(++m )<< endl;
}
return 0;
}
int main()
{
unsigned ThrdAddr = 0;
uintptr_t hThread{ 0 };
hEvent = CreateEvent(nullptr, false, false, "");
hThread = _beginthreadex(nullptr,0, (_beginthreadex_proc_type)StartAddress,nullptr,false, &ThrdAddr);
while (true)
{
cout << "Main thread" << (++m) << endl;
}
return system("pause");
}
![非数据同步](https://img-blog.csdnimg.cn/20181228134358272.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3Nzc0MzA0,size_16,color_FFFFFF,t_70)
进行数据同步之后的代码:
#include<Windows.h>
#include<process.h>
#include<iostream>
using namespace std;
HANDLE hEvent{ 0 };
int m = 0;
unsigned int StartAddress(void* )
{
while (true)
{
DWORD bFlag = WaitForSingleObject(hEvent, 30);
if (bFlag == WAIT_OBJECT_0)
{
cout << "Second thread"<<(++m )<< endl;
ResetEvent(hEvent);
Sleep(5);
}
}
return 0;
}
int main()
{
unsigned ThrdAddr = 0;
uintptr_t hThread{ 0 };
hEvent = CreateEvent(nullptr, false, false, "");
hThread = _beginthreadex(nullptr,0, (_beginthreadex_proc_type)StartAddress,nullptr,false, &ThrdAddr);
while (true)
{
cout << "Main thread" << (++m) << endl;
SetEvent(hEvent);
Sleep(5);
}
return system("pause");
}