您当前的位置: 首页 > 

插件开发

暂无认证

  • 2浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Win32-进程锁-进程异步-进程互斥-CreateMutex-OpenMutex-WaitForSingleObject-ReleaseMutex

插件开发 发布时间:2022-07-16 10:29:36 ,浏览量:2

文章目录
    • 1.CreateMutex函数
    • 2.OpenMutex函数
    • 3.WaitForSingleObject函数
    • 4.ReleaseMutex函数
    • 5.作者答疑
  如果多个进程对同一个文件进行操作,一定要加锁,否则文件会发生不可以预知的异常,或者结果不可以预测。

1.CreateMutex函数

  功能:作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。

HANDLE CreateMutex(
 LPSECURITY_ATTRIBUTES lpMutexAttributes,  // 指向安全属性的指针
 BOOL  bInitialOwner,  // 初始化互斥对象的所有者
 LPCTSTR lpName  // 指向互斥对象名的指针
 );
2.OpenMutex函数

  功能:作用是为现有的一个已命名互斥体对象创建一个新句柄。

HANDLE OpenMutex(
DWORDdwDesiredAccess, // access
BOOLbInheritHandle, // inheritance option
LPCTSTRlpName // object name
);

  参数说明:   第一个参数表示访问权限,对互斥量一般传入MUTEX_ALL_ACCESS。详细解释可以查看MSDN文档。   第二个参数表示互斥量句柄继承性,一般传入TRUE即可。   第三个参数表示名称。某一个进程中的线程创建互斥量后,其它进程中的线程就可以通过这个函数来找到这个互斥量。   函数访问值:成功返回一个表示互斥量的句柄,失败返回NULL。

3.WaitForSingleObject函数

  功能:WaitForSingleObject函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。

DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
4.ReleaseMutex函数

  功能:它是一种线性指令,释放线程拥有的互斥体的控制权。

BOOL WINAPI ReleaseMutex(
  _In_  HANDLE hMutex
);

  参数说明:访问互斥资源前应该要调用等待函数,结束访问时就要调用ReleaseMutex()来表示自己已经结束访问,其它线程可以开始访问了。

一般互斥使用形式如下:

bool ACopyFileExt(std::string src_filename, std::string dst_filename)
{
	HANDLE mutex;
	mutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "ACopyFileExt");
	if (mutex == NULL)
	{
		mutex = CreateMutex(NULL, FALSE, "ACopyFileExt");
	}
	WaitForSingleObject(mutex, INFINITE);

	//功能区
	bool rlt = ACopyFile(src_filename, dst_filename);

	ReleaseMutex(mutex);
	return rlt;
}
5.作者答疑

  如有疑问,敬请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0378s