windows下多线程简单demo

#include <iostream>
#include <cstdlib>
#include <Windows.h>
using namespace std;
int tickets = 100;
HANDLE hMutex;
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
	while (true)
	{
		WaitForSingleObject(hMutex, INFINITE); //请求互斥量访问权
		if (tickets > 0)
		{
			Sleep(10);
			cout << "Thread 1 sell ticket : "<<tickets--<<endl;
		}
		else
		{
			break;   
		}
		ReleaseMutex(hMutex);//释放
	}
	return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
	while (true)
	{
		WaitForSingleObject(hMutex, INFINITE);
		if (tickets > 0)
		{
			Sleep(10);
			cout << "Thread 2 sell ticket : "<<tickets--<<endl;
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);

	}
	return 0;
}
//创建两个线程,线程之间通过创建的互斥量来互斥
int main()
{
	/*
	第一个参数同样是安全结构,默认是NULL不能继承句柄;第二个参数为FALSE时创建Mutex时不指定所有权,
	若为TRUE则指定为当前的创建线程ID为所有者,其他线程访问需要先ReleaseMutex;第三个参数用于设置Mutex名,
	为NULL时表示是匿名互斥量
	*/
	hMutex = CreateMutex(NULL, FALSE, NULL);
	/*
	-1-第一个参数是安全属性结构,主要控制该线程句柄是否可为进程的子进程继承使用,默认使用NULL时表示不能继承;若想继承线程句柄,则需要设置该结构体,将结构体的bInheritHandle成员初始化为TRUE;
	-2-cbStack表示的线程初始栈的大小,若使用0则表示采用默认大小初始化;
	-3-lpStartAddr表示线程开始的位置,即线程要执行的函数代码,这点有点类似于回调函数的使用;
	-4-lpvThreadParam用来接收线程过程函数的参数,不需要时可以设置为NULL;
	-5-fdwCreate表示创建线程时的标志,CREATE_SUSPENDED表示线程创建后挂起暂不执行,必须调用ResumeThread才可以执行,0表示线程创建之后立即执行
	-6-lpIDThread用来保存线程的ID;
	*/
	HANDLE hThread_1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//创建线程1
	HANDLE hThread_2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);//创建线程2
	CloseHandle(hThread_1);
	CloseHandle(hThread_2);

	system("pause");
	return 0;

}

原文链接


http://blog.chinaunix.net/uid-26275986-id-3886498.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值