stdthread 相关问题

std :: thread是一个C ++ 11标准库类型,它运行一个新线程的函数

std::thread segfault with null native thread

你能帮我理解为什么这段代码会给我一个段错误吗?我创建线程的方式会不会有问题?我很难理解这个问题。 #包括 你能帮我理解为什么这段代码会给我一个段错误吗?我创建线程的方式会不会有问题?我很难理解这个问题。 #include <fstream> #include <sstream> #include <thread> #include <iostream> #include <algorithm> #include <new> #include <thread> #include <string> class temp { private: std::thread m_thread; std::vector<std::string> m_tokens; public: temp() { m_thread = std::thread(&temp::run, this); } void run() { while (1) { std::string token; std::cin >> token; if (std::ranges::find(m_tokens, token) == m_tokens.end()) { std::cout << "duplicate token" << token << "\n"; continue; } m_tokens.push_back(token); std::cout << token << " added\n"; } } void join() { m_thread.join(); } }; int main(int argc, char **argv) { temp t; t.join(); return EXIT_SUCCESS; } ThreadSanitizer:DEADLYSIGNAL ==19246==ERROR: ThreadSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f81d5f98880 bp 0x7b0800000020 sp 0x7f81d30bf298 T19247) ==19246==The signal is caused by a WRITE memory access. ==19246==Hint: address points to the zero page. #0 __tsan_func_entry <null> (libtsan.so.0+0x9e880) #1 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (temp::*)(), temp*> > >::_M_run() /opt/rh/devtoolset-11/root/usr/include/c++/11/bits/std_thread.h:211 (trading+0x41e3a3) #2 execute_native_thread_routine <null> (trading+0x437ab3) #3 start_thread <null> (libpthread.so.0+0x7ea4) #4 clone <null> (libc.so.6+0xfeb0c) ThreadSanitizer can not provide additional info. SUMMARY: ThreadSanitizer: SEGV (/lib64/libtsan.so.0+0x9e880) in __tsan_func_entry ==19246==ABORTING 怎么可能当我直接运行它时代码运行没有任何问题,但是当作为线程运行时却出现段错误? 您必须在主线程中的 .join() 对象上调用 std::thread(例如在 temp 的析构函数中),以便让主线程等待 std::thread 管理的线程退出。 无限循环不能替代它,没有可观察到的副作用的无限循环在 C++ 中具有未定义的行为。编译器确实在它们永远不会被执行的假设下进行优化,有时甚至会为包含它们的函数(例如 Clang)编译完全无意义的东西,或者只是简单地删除它们。

回答 1 投票 0

vector 在 std::thread 执行 operator() 时变为空

我正在尝试创建一个线程(PrinStringManager),该线程又创建多个线程(PrintEntry)(取决于传入的字符串向量的元素数量)。 每个 PrintEntry 线程

回答 1 投票 0

线程化时访问静态地图时发生故障。

考虑以下代码片段:myEnum stringToEnum(const std::string& enumString) { static const std::unordered_map conversionMap = {{"enumA", myEnum::enumA}, ...

回答 1 投票 1

std::thread 占用了 DLL 的引用次数,从而阻止了 DLL 的卸载。

我有一个windows c++ dll,它被一个第三方程序加载。我最近添加了一个线程池(这个[https:/github.comprogschjThreadPoolblobmasterThreadPool.h][1])。但是现在dll ...

回答 1 投票 0

如何在c ++中将std :: thread :: id转换为字符串?

如何在C ++中将std :: thread :: id转换为字符串?我正在尝试将std :: this_thread :: get_id()生成的输出类型转换为字符串或char数组。

回答 3 投票 16

是否可以定义std :: thread并在以后进行初始化?

我的目标是将std :: thread对象保留为数据成员,并在需要时对其进行初始化。我无法执行此操作(如下面的代码所示),因为删除了std :: thread类的副本构造函数。 ...

回答 4 投票 20


std线程构造函数使用可变参数线程函数吗?

我正在尝试将可变数量的回调函数(都具有相同的签名)传递给线程函数。我使用命名空间std提出了以下代码; void callback(int i){cout ] >>>

回答 2 投票 1

如何将可变参数传递给std :: thread?

我想通过包装C ++ 11中的std :: thread类来使用自己的Thread实现,这样我就可以像我想要的那样处理异常。这是我的包装类:#include #...

回答 1 投票 4

关于std :: condition_variables的两个问题

我一直在试图找出std :: condition_variables,并且我对wait()以及是否使用notify_all或notify_one感到特别困惑。首先,我编写了一些代码并将其附加在下面。 ...

回答 1 投票 0

为什么std :: is_invocable ,std :: decay_t > :: value为false?

std :: is_invocable ,std :: decay_t > :: value的值为false。但是void(int&)会衰减为void *(int&),而int会转换为int,我可以使用std :: ...

回答 1 投票 1

[现代Intel上的C ++ 11:我疯了还是非原子对齐的64位加载/存储实际上是原子的?

我能否将一项关键任务应用程序基于此测试的结果,即100个线程读取一个主线程设置的十亿次指针永远不会流泪?做其他任何潜在的问题...

回答 1 投票 2

如何使用抽象类抽象创建std :: thread

## #include #include A类{public:virtual void intiliaze(int x,int y)= 0; }; B类:公共A {公共:虚拟虚空...

回答 1 投票 0

在共享库中使用std :: thread导致SIGSEGV

我刚从Windows进入Linux c ++编程。试图制作一个共享库libso.so,它使用std :: thread。共享库将由其他人加载并调用导出功能。 ...

回答 1 投票 1

[std :: thread具有奇怪的joinable()行为

我正在尝试实现一个线程列表,其中一个线程通过std :: thread :: join与下一个线程进行通信,直到所有工作完成为止。 #include #include&...

回答 1 投票 0

为什么在c ++的类中拥有一个线程并用构造函数调用它是如此困难?

我一直在尝试从类构造函数调用线程无济于事。为什么将函数或对象传递给线程如此困难。 #include #include class a {...

回答 1 投票 -4

使用unique_ptr和原始指针重载全局函数

我一直在开发c ++的功能,该功能使用一些用C语言编写的旧代码。我一直在遇到带有重载版本的函数的编译器错误,该函数采用unique_ptr或raw ...

回答 1 投票 2

为什么将临时函数传递给线程函数时,两次调用move构造函数? [重复]

在下面的代码中,考虑到我的线程函数通过右值引用接受参数,因此我不明白为什么调用类的移动构造函数两次,所以我希望移动构造函数会... ...]

回答 1 投票 4

用非原子更新原子变量,反之亦然

我正在使用一个线程中的原子变量size_t并从另一个线程中读取它。以下是代码:代码:// MyClass.hpp #pragma一旦#include class MyClass {public:...

回答 1 投票 0

嵌入式设备-> std :: thread-> FreeRTOS?

因此,我目前正在研究针对嵌入式设备(Cortex m4)使用纯C ++ 17项目的可能性。但是基于它是嵌入式设备这一事实,我们拥有端口并使用RTOS这样的...

回答 2 投票 1

© www.soinside.com 2019 - 2024. All rights reserved.