您的位置:首页 > 移动开发 > Objective-C

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

2015-07-09 14:27 507 查看
今天是上班第一天,写了一个简单的线程互斥访问练习了一下多线程。虽然以前写过,但现在写还是碰到蛮多问题,比如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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: