【发布时间】:2022-01-17 15:59:18
【问题描述】:
我正在编写一个应该使用多线程功能的类。 目标是我没有任何来自外部的阻塞方法,尽管我在类中使用了具有阻塞功能的库。 我想在他们自己的线程中运行它们。 不幸的是,我遇到了内存故障(核心转储)错误。
在c ++ 11中实现这样的最佳实践是什么?为什么会出现错误,我怎样才能为我想提前在线程中调用的函数指定内存?
我的班级
..
class foo {
void startUp();
foo();
~foo();
std::thread foo_worker;
int retValue;
};
void foo::startUp() {
int retValue = 0;
std::thread t([this] () {
retValue = blocking_lib_func();
});
foo_worker = std::move(t);
}
foo::~foo() {
....
foo_worker.join();
}
我的主要
int main()
foo test();
test.statUp()
}
【问题讨论】:
-
您的问题太含糊,无法回答,您不能声称自己的问题没有阻塞,然后在代码中的某个线程上
join。建议你看看std::async或更正经的 IPC 库。 -
你为什么在这几行中使用这么多的动态内存分配?另外,您认为通过使成员
volatile来做什么?这些都是不良编程习惯的指标,很容易导致问题发生 -
好的,是的,应该将 .join() 移入析构函数。我使工作线程不稳定,因为该线程正在控制一个 gui 框架,以使 ist “更快”
-
你不是在创建线程
volatile你是在创建指向线程volatile的指针——这与性能完全无关 -
volatile- "...这使得 volatile 对象适合与信号处理程序通信,但不适用于另一个执行线程..." 见en.cppreference.com/w/cpp/language/cv
标签: c++ multithreading class c++11