用WaitForSingleObject()函数实现简单的多线程互斥访问

原创 2015年07月09日 14:27:39

今天是上班第一天,写了一个简单的线程互斥访问练习了一下多线程。虽然以前写过,但现在写还是碰到蛮多问题,比如WaitForSingleObject()函数加在哪个位置(可以用WaitForSingleObject()等待前一个线程结束后然后开启下一个线程以此达到同步的问题,但网上看到别人的写法在线程函数中同时也加了一道锁。我目前的测试是二者只需要其一即可实现互斥访问),刚开始申请了五个线程ID最后只显示出了三个等等(vs2013一个完整的dos界面只能显示300行,每个线程ID会打印100行数字,所以最后打印结果只有200-500)。

#include "stdafx.h"
#include <iostream>   
#include <windows.h> 

using namespace std;

int globalV = 0 ;

HANDLE hMutex = NULL;

//每个线程都给全局变量增加100
DWORD WINAPI Add(LPVOID lpParamter)

{

//在实现加法的代码处加锁

hMutex = CreateMutex(NULL,TRUE,"Add");
WaitForSingleObject(hMutex, INFINITE);
for(int i = 1 ; i <= 100 ; i++)
{
globalV++;
cout<<"ThreadID  "<< GetCurrentThreadId()<<"    globalV = "<<globalV<<endl;
}
ReleaseMutex(hMutex);
return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{


HANDLE hThead[5];
int i;
for (i = 0 ; i < 3 ;i++)
{
hThead[i] = CreateThread(NULL, 0, Add, NULL, 0, NULL);

cout<< GetCurrentThreadId()<<endl;

//等待前一个线程结束然后开启下一个线程

WaitForSingleObject(hThead[i], INFINITE);
CloseHandle(hThead[i]);
}
system("pause");

return 0;
}
上述方法接近于通过加锁的方式来实现线程间的同步,此外还有一些其他的方法实现线程间的同步,下次有时间继续进行试验。可参考链接:http://blog.csdn.net/chexlong/article/category/947954
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

WaitForSingleObject()函数、WaitForMultipleObject()函数

在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjec...

WaitForSingleObject的用法-(判断一个程序是否结束)

WaitForSingleObject 的应用   你还再为怎么判断一个程序是否结束而苦恼吗?或许你在想可以用一个循环每隔几秒来判断一次这个进程是否结束,但是这样会有问题,如果间隔时间太短就会很占...

c++中WaitForSingleObject函数解析(1)

函数的原型: DWORD WaitForSingleObject( HANDLE hHandle, // handle to object DWORD dwMilliseconds // time-...

WaitForSingleObject的用法 控制多线程

WaitForSingleObject的用法                      ...

MFC 多线程WaitForSingleObject死锁

遇到一种情况,在子线程程中调用了主线程方法,再使用多线程同步的话,会死锁,经过度娘的询问,发现也有朋友遇到同样的问题,于是写了一个测试代码如下: MyMutex g_mutex;//自己封装的Mute...

Windows下C语言多线程函数_beginthread简单入门应用例子

有时候我们在Windows下使用C语言进行一些小工程编写的时候,需要用到并行程序设计的知识。但是一般情况下,我们学习C语言都很少接触并行程序的设计,对我而言,更加习惯使用Java的并行程序设计。最近学...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)