stdthread 相关问题

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

std::thread::id 跨进程是否唯一?

根据我的经验,结果似乎是 std::this_thread::get_id() 在整个进程中是唯一的:一个进程的 id 与另一个进程不同。 这是标准保证的吗?

回答 3 投票 0

分离线程然后让它超出范围(并让它仍然运行)是否安全?

我有以下代码,我认为它可以工作(原谅这个愚蠢/做作的例子)。 无效run_thread() { std::线程 t([]{ 而(真) { // 不断获取字符.....

回答 4 投票 0

在这个简单的 C++ 线程程序中获取核心转储

我是 C++ 并发的新手。我只是尝试创建新线程并尝试运行它。 但我收到内存故障(coredump)错误。 现在可以找到导致内存故障的原因了。当我尝试...

回答 1 投票 0

这个C++多线程程序有什么问题?

我使用 std::thread 编写了一个多线程 C++ 程序,如下所示: #包括 #包括 #包括 #包括 我们...

回答 1 投票 0

检查函数参数值是否是线程本地的

C++,是否可以检查(最好在编译时)函数参数引用值是否是线程局部的? 例如。 void foo( int& bar ) { ... } 我想检查/强制执行该栏引用

回答 1 投票 0

如何从另一个线程挂起(和恢复)'std::thread'?

我是 std::thread 的新手。我需要让另一个线程的 std::thread 进入睡眠状态,这可能吗?在示例中,我看到的只是如下代码: std::this_thread::sleep_for(std::chrono::seconds(1)); 但是...

回答 3 投票 0

为什么临时的std::lock_guard对象会立即解锁?

我正在学习 std::mutex、std::thread,我对下面两段代码的不同行为感到惊讶: #包括 #包括 #包括 std::mut...

回答 1 投票 0

在 lambda 中捕获`thread_local`

在 lambda 中捕获 thread_local: #包括 #包括 #包括 结构体人 { std::字符串名称; }; int main() { thread_local 个人用户{...

回答 2 投票 0

使用std::thread类时,为什么我可以传递通过引用捕获变量的lambda表达式?

我很难理解以下 std::thread 的注释(来自 cppref): 线程函数的参数按值移动或复制。如果需要将引用参数传递给第三个...

回答 1 投票 0

创建新线程时编译器错误:“调用:找不到匹配的重载函数”

我有以下C++代码: #包括 #包括 #包括 #包括 #包括 void ThreadFunc(std::vector* pInt...

回答 1 投票 0

以 std::ifstream 作为参数的 std::thresd 中出现错误

我使用了 vs2019 的 CppCLRWinformsProjekt 扩展。我需要实现一个从文件读取并将数据存储在某些变量中的线程。 线程函数如下: 私有:void startThread(std::ifstr...

回答 1 投票 0

睡眠时间非常短,为什么线程在看到停止标志设置之前只完成零次或一次打印迭代?

见下面的代码,AsyncTask 创建一个对等线程(计时器)来增加一个原子变量并休眠一段时间。预期的输出是打印 counter_ 10 次,值范围从 1 到 10,...

回答 1 投票 0

关于递增原子变量的问题?

见下面的代码,AsyncTask 创建一个对等线程(计时器)来增加一个原子变量并休眠一段时间。预期的输出是打印 counter_ 10 次,值范围从 1 到 10,...

回答 1 投票 0

为什么这段代码偶尔会挂在 std::condition_variable::wait() 上?

我已经在 C++ 中实现了一个非常标准的单消费者-多生产者模式,此外还限制了队列中的任务数量。 一个 Worker 在一个

回答 2 投票 0

这个简单的多线程代码是如何导致内存损坏的?

以下代码可靠地产生段错误。 #包括 #包括 类类{ 民众: 类(常量整数) : cinteger(整数), carray(std::array&l...

回答 2 投票 0

为什么 c++ 线程是可移动的而不是可复制的?

正如题名所说,为什么C++线程(std::thread和pthread)是可移动的而不是可复制的?如果我们让它可复制,会有什么后果?

回答 2 投票 0

将 printf 语句移动到“计数”变量的递增/递减下方时出现奇怪的线程行为

我想做的是启动 2 个线程,一个将共享资源递增 1,另一个将共享资源递减 1,借助条件变量和唯一锁。我很新

回答 1 投票 0

什么时候应该使用 std::thread::detach?

有时我必须使用 std::thread 来加速我的应用程序。我也知道 join() 会等待线程完成。这很容易理解,但是调用 detach() 和 ... 有什么区别

回答 6 投票 0

OpenCV 和 std:thread 的内存泄漏

我有一段相当简单的代码,我在一个函数(myFunction)中生成了一些 cv::Mat 图像并用它们填充了一个 std::vector,同时填充了向量,内存使用量增加了......

回答 0 投票 0

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

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