SIGABRT 在临界区模拟 C++ 代码

Posted

技术标签:

【中文标题】SIGABRT 在临界区模拟 C++ 代码【英文标题】:SIGABRT in critical section simulation C++ code 【发布时间】:2021-03-16 05:57:11 【问题描述】:

我是线程新手,我正在尝试在此代码中模拟临界区竞争条件问题。

#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
using namespace std::chrono;

int x = 20;

void increment()

    ++x;


void decrement()

    --x;


int main()

    thread t1(increment);
    thread t2(decrement);
    cout << x;
    return 0;

但是,此代码以 SIGABRT 终止。 在没有活动异常的情况下调用终止 21 为什么我在这段代码中得到 SIGABRT?

【问题讨论】:

这能回答你的问题吗? C++ terminate called without an active exception 【参考方案1】:

您必须为线程调用 join 才能正确终止它们

t1.join();
t2.join();

【讨论】:

以上是关于SIGABRT 在临界区模拟 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章