互斥量的使用方法

本文展示了一个使用互斥量进行线程同步的C++示例。通过创建和使用名为Mutex.Test的互斥量,确保了三个并发子线程能够有序地访问共享资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

互斥量的使用。获得互斥量,通过OpenMutex获得。

创建一个互斥量:CreateMutex(属性指针,是否初始化拥有者, 名称)。

打开并申请占有一个互斥量:OpenMutex(MUTEX_ALL_ACCESS, FALSE$, "Mutex.Test");

释放互斥量:ReleaseMutex(HANDLE);



//使用互斥量同步的例子
//三个子线程互斥的执行

#include <iostream>
#include <Windows.h>

#define THREAD_INSTANCE_NUMBER  3

using namespace std;


DWORD ThreadProc(void* pData){
	int threadNumberTemp = *(int*)pData;
	HANDLE hmutex;
	cout << "ThreadProc: " << threadNumberTemp << " is running." << endl;
	if ((hmutex = OpenMutex(MUTEX_ALL_ACCESS, false, (LPCWSTR)"Mutex.Test")) == NULL){
		cout << "open mutex error." << endl;
		return 0;
	}
	cout << "ThreadProc: " << threadNumberTemp << " gets the mutex." << endl;
	ReleaseMutex(hmutex);
	CloseHandle(hmutex);
	return 0;
}


int main()
{
	DWORD ID[THREAD_INSTANCE_NUMBER];
	HANDLE h[THREAD_INSTANCE_NUMBER];
	HANDLE hmutex;
	if ((hmutex = OpenMutex(MUTEX_ALL_ACCESS, false, (LPCWSTR)"Mutex.Test")) == NULL){
		if ((hmutex = CreateMutex(NULL, false, (LPCWSTR)"Mutex.Test")) == NULL){
			cout << "create mutex error." << endl;
			return 0;
		}
	}
	for (int i = 0; i < THREAD_INSTANCE_NUMBER; i++){
		h[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (void*)&ID[i], 0, &ID[i]);
		if (h[i] == NULL){
			cout << "create thread error." << endl;
		}
		else{
			cout << "create thread: " << ID[i] << endl;
		}
	}
	WaitForMultipleObjects(THREAD_INSTANCE_NUMBER, h, true, INFINITE);
	CloseHandle(hmutex);
	return 0;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值