GDB调试技巧实战--多线程

发布时间:2024年01月20日

前言

曾经在《Modern C++ 条件变量》提到过可以用GDB来模拟线程调度来解释为什么打印“this is fun2,count=6” 而不是“this is fun2,count=5”。

回顾C++程序

#include <iostream>
#include <thread>
#include <condition_variable>
#include <mutex>
#include <unistd.h>
using namespace std;
//全局条件变量
condition_variable cond;
mutex _mutex;
int count = 0;

void fun1(){
    while(1)
    {
        count++;
        unique_lock<mutex>lock(_mutex);
        if(count%5 == 0)
        {
            cond.notify_one();
        }
        else
        {
            cout<<"this is fun1,count="<<count<<endl;
        }
        lock.unlock();
    }
}

void fun2()
{
    while(1)
    {
        unique_lock<mutex>lock(_mutex);
        cond.wait(lock);
        sleep(2);
        cout<<"this is fun2,count="<<count<<endl;
        lock.unlock();
    }
}

int main()
{
    
文章来源:https://blog.csdn.net/zhaiminlove/article/details/135708351
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。