createmutex怎么用_create的用法和短语

createmutex怎么用_create的用法和短语HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针BOOL bInitialOwner, // 初始化互斥对象的所有者LPCTSTR lpName // 指向互斥对象名的指针);1. CreateMutex只是创建了一把锁,  这把锁你用来锁门还是锁抽屉还是锁

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

1.  CreateMutex只是创建了一把锁,  这把锁你用来锁门还是锁抽屉还是锁你对象的内裤都由你自己决定。
2. lpName是指定这把锁的名字.  你要不给这把锁取个名字都可以.  只是有了相同的名字, 在跨进程加锁的时候, 就可以得到同一把锁。
3. HANDLE m_hMutex = CreateMutex(NULL,TRUE,”cplusplus_me”);   只是创建了一把锁, 到目前这句完成, 他没有锁任何东西。

//加锁
WaitForSingleObject(hMutex, INFINITE);  //还有其它函数可用, 详见MSDN中说明

//这里写被加锁的东西.  一般是操作一些共享数据(占用系统内存)。

//解锁
ReleaseMutex(hMutex);

/*通过写一个加锁的类来对共享的数据进行有效的安全控制,防止内存错误*/
class MTCMutex
{
public:
MTCMutex() :_mutex(NULL)
{
this->_mutex = CreateMutex(NULL, FALSE, NULL);
}
virtual ~MTCMutex()
{
if (this->_mutex)
{
CloseHandle(this->_mutex);
this->_mutex = NULL;
}
}
MTCMutex(const MTCMutex& mutex){ *this = mutex; }
MTCMutex& operator=(const MTCMutex& other)
{
if (this != &other)
{
this->_mutex = other._mutex;
}
return *this;
}
private:
HANDLE _mutex;


public:
void Lock()
{
WaitForSingleObject(this->_mutex, INFINITE);
}


void UnLock()
{
ReleaseMutex(this->_mutex);
}
};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185732.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jsp网页在浏览器中不显示图片_eclipse环境下配置tomcat中jsp项目的虚拟路径[通俗易懂]

    遇到的问题是这样的,在jsp网页中嵌入了本地的图片,由于会用到上传到服务器的图片,所以没有放到项目里面,而是把所有图片单独放到一个文件夹里,然后打算使用绝对路径把要显示的图片显示出来,比如是放在了E盘的uploadPhotos文件夹里,但是在使用绝对路径显示时,代码如下:在eclipse中的内置浏览器里面是可以显示的,但是到其他浏览器都不显示,后来看到这篇文章http://bbs.csdn.net

    2022年3月11日
    45
  • 错误:备份集中的数据库备份与现有XXX数据库不同

    错误:备份集中的数据库备份与现有XXX数据库不同当在使用另外一台的数据库备份文件.bak恢复到本机数据库时,遇到“备份集中的数据库备份与现有XXX数据库不同”的错误时,只需要以下几步:删除与要恢复数据库同名的已经存在的数据库; 右击“数据库”选择“还原数据库”;选择源设备;然后再在弹出窗口的“目标数据库”中选择要还原数据库名;这时要备份的数据库的名字会弹出来,所以不需要提前创建现在手中有SqlServer2…

    2022年6月12日
    33
  • navicat 15激活码-激活码分享[通俗易懂]

    (navicat 15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html09LVN3XLKC-eyJsaWNlbnNlSWQi…

    2022年3月28日
    1.1K
  • executorservice等待线程池执行完毕_java线程池策略

    executorservice等待线程池执行完毕_java线程池策略packagecom.aop8.testJava;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.Executo…

    2025年10月22日
    3
  • django修改数据_winform增删改查

    django修改数据_winform增删改查前言在ORM框架中,所有模型相关的操作,比如添加/删除等。其实都是映射到数据库中一条数据的操作。因此模型操作也就是数据库表中数据的操作。添加一个模型到数据库中:添加模型到数据库中。首先需要创建一

    2022年7月31日
    5
  • sigar取得进程信息

    sigar取得进程信息首先先上代码 SigerVOvo newSigerVO try Sigarsigar newSigar for Longpid sigar getProcList try Psps newPs List String list ps getInfo sigar pid String

    2025年7月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号