- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一个简单的线程跟踪程序。线程简单地打印前十个整数,然后是“线程完成”消息。
#include <iostream>
#include <vector>
#include <numeric>
#include <thread>
void f();
int main(int argc, const char * argv[]) {
std::thread t(f);
std::cout << "Thread start" << std::endl;
t.detach();
t.join();
std::cout << "Thread end" << std::endl;
return 0;
}
void f()
{
std::vector<int> a(10);
std::iota(a.begin(), a.end(), 0);
for(const int& i : a)
{
std::cout << i << std:: endl;
}
std::cout << "Thread is done." << std::endl;
}
然而,当它运行时,t.join 在 libc ABI 的某处抛出一个 std::__1::system_error 异常,导致程序以 SIGABRT 终止:
Thread start
0
1
2
3
4
5
6
7
8
9
Thread is done.
libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: thread::join failed: No such process
有时当它运行时,主线程中的异常发生在线程 t 运行之前(在同一个地方)(但它仍然如此):
Thread start
libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: thread::join failed: No such process
0
1
2
3
4
5
6
7
8
9
Thread is done.
最佳答案
问题是detach和 join有线程可连接的先决条件,并且两者都有可连接为假的后置条件。这意味着一旦你在一个线程上调用了一个,试图调用另一个是无效的。
其次,您所看到的不同行为是由于线程和主函数的执行时间所致。有时分离和连接直到线程运行之后才执行,有时它们运行之前,以及介于两者之间的任何东西。
关于C++11 std::thread join 在 Xcode 6 上因 system_error 异常和 SIGABRT 而崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970123/
我正在尝试编写一个多线程记录器,当我测试要写出的行队列是否为空时,出现带有无效参数的std::system_error。构造unique_lock时会发生这种情况。如果我通过std::try_to_l
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why does this simple std::thread example not work? 代码:
这个问题在这里已经有了答案: Why is locking a std::mutex twice 'Undefined Behaviour'? (2 个答案) 关闭 7 年前。 这是代码 mutex
C++11 引入了包含处理错误代码的通用系统的 header 。一个 std::error_code是一个包含 int 的元组、错误代码和对 std::error_category 的引用,它定义了错
我正在尝试运行我的程序,但在几次运行中我遇到了一个错误: terminate called after throwing an instance of 'std::system_error' wh
我的线程代码中存在异常问题。基本上这是一个生产者-消费者问题,不同之处在于消费者必须先清空自己的队列,然后再从主队列消费,此外,根据值,他们将数字添加到另一个消费者队列或对其进行处理。 代码按预期工作
当我运行我的代码时: nb workers = 12 I'm i : 0 HELLO I'm func1 BYE I'm func2 terminate called after throwing a
最近我开始研究 Grpc。在 Grpc C++ 编译中出现以下错误,不确定是什么导致了这个问题。 我不是 C++ 背景,任何帮助对我来说都会非常有用。 [HOSTLD] 链接/home/test/gr
我开发了一种使用推力 的算法。我的办公室计算机有一张支持 CUDA 的卡,其架构为: --- General information about Device 0 Name: Quadro 2000
我有这个抛出异常的代码(非常类似于 what is suggested here): int accept4(int sockfd, sockaddr *addr, socklen_t *addrle
我在具有 2.1 计算能力的 Nvidia 卡上使用 Thrust 运行蒙特卡洛模拟。如果我尝试一次 transform_reduce 整个 device_vector,我会收到以下错误。这不是耗尽设
中定义的异常(例如 std::logic_error 、 std::runtime_error 及其子类,例如 std::system_error )具有需要字符串参数的构造函数,例如: domai
我正在开发一个系统,该系统旨在使用名为 error_code、error_condition 和 error_category 的类——一个新的方案std:在 C++11 中,尽管目前我实际上正在使用
我看了一篇深思熟虑的series of blog posts关于新 C++11 中的 header 。它说标题定义了 error_code表示操作(例如系统调用)返回的特定错误值的类。它说标题定义了
这个问题在这里已经有了答案: What are the correct link options to use std::thread in GCC under linux? (5 个回答) 关闭9年
我正在使用 tensorflow 训练 resNet50,使用具有以下属性的共享服务器: Ubuntu 16.04 3 gtx 1080 gpu tensorflow 1.3 python 2.7 但
我在Android应用程序中使用boost inide并获得随机SIGABRT: "terminating with uncaught exception of type boost::wra
我使用从 std::system_error 继承的类进行错误处理,我想控制调用 what() 时返回的内容。原因:标准(C++11 和 C++1y CD 草案 - N3690,下面的 § 引用是后者
如果我调用通过 GetLastError 报告错误的 Win32 函数,例如 RegisterClassEx ,如何为该错误抛出 std::system_error ? 最佳答案 检查 GetLast
我正在尝试使用 system_error 工具来处理我的库中的错误。我将简要讨论该库的结构,以防您发现它对您有所帮助:该库的 namespace 称为 commons,在此之下我还有另一个 names
我是一名优秀的程序员,十分优秀!