qt中的互斥量和C++/Windows中的互斥量

94 篇文章 4 订阅

一、qt中的互斥量(还没完全弄懂)

主要参考博客:https://blog.csdn.net/u014597198/article/details/75428013(主要运用的还是windows互斥量)

https://blog.csdn.net/zhaoyuaiweide/article/details/77991658

https://blog.csdn.net/kenjianqi1647/article/details/88364544

二、C++中的互斥量

主要参考博客:https://blog.csdn.net/tennysonsky/article/details/77417394

主要参考第一段代码,经过一些整理,以下的例子就能看出加锁与不加锁的问题了。加上头文件<mutex>

#include <iostream>      
#include <thread>        
#include <mutex>       

using namespace std;

mutex g_lock; //全局互斥锁对象,#include <mutex>

// 打印机
void printer(const char *str)
{
  //  g_lock.lock(); //上锁
    lock_guard<mutex> lock(g_lock);//如果没有上锁,那打印出来的hello world 就会出现乱码的现象

    while (*str != '\0')
    {
        cout << *str;
        str++;
        this_thread::sleep_for(chrono::seconds(1));
    }
    cout << endl;

    g_lock.unlock(); //解锁
}

// 线程一
void func1()
{
    const char *str = "hello";
    printer(str);
}

// 线程二
void func2()
{
    const char *str = "world";
    printer(str);
}

int main(void)
{
    thread t1(func1); 
    thread t2(func2);

    //t1.join();
   // t2.join();
    while (1);
    return 0;
}

注意:查阅资料说一般lock和unlock是同步出现的,但是如果只lock,而没有unlock,我尝试上面代码没有出现问题,具体会出现什么bug,这个留着后期探究

三、windows下的互斥量

主要参考博客:https://blog.csdn.net/arile18/article/details/1575403

主要需要注意的代码:

// 创建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");
// 检查错误代码
if (GetLastError() == ERROR_ALREADY_EXISTS) {
 // 如果已有互斥量存在则释放句柄并复位互斥量
 CloseHandle(m_hMutex);
 m_hMutex = NULL;
 // 程序退出
 return FALSE;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值