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++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

c++多线程问题

C++多线程同步技巧 --- 临界区

创建线程安全单例 (C++) 时的临界区初始化

临界数据临界区和原子操作

在非 C++ 异常的情况下解锁临界区

FreeRTOS临界区