37得票4回答
使用std::lock(c++11)会导致巨大的CPU负载

我最近实现线程/互斥量管理器的努力导致CPU负载达到了75%(4核),而所有四个运行的线程都处于睡眠或等待互斥量被解锁状态。具体的类过于庞大,难以在此完全发布,但我可以将原因缩小到安全获取两个互斥量造成死锁。std::unique_lock<std::mutex> lock1( m...

15得票2回答
C++11及以上版本中,std::mutex是否应该声明为全局变量而不是作为函数参数传递给std::thread?

我看到大多数使用std::mutex的例子中,互斥锁是全局的。我想知道这样做的特定原因是什么?在我的程序中,我没有这样做,而是将互斥锁作为std::thread std::ref传递。拥有全局变量不是一个好的实践,如果没有语言限制要求这样做,C++中为什么要使用全局std::mutexes?

114得票11回答
如何在C++11中获取整数线程ID

c++11提供了获取当前线程ID的可能性,但它不能转换为整数类型:cout<<std::this_thread::get_id()<<endl; 输出:139918771783456cout<<(uint64_t)std::this_thread::get_...

16得票5回答
使用std::thread调用重载的成员函数

我们是否可以为需要使用线程跨越的函数进行重载?我有一个名为Complex的简单类。class Complex { public: Complex():realPart_(0), imagPart_(0){} Complex(double rp, double ip) : re...

26得票5回答
使用VS2012 RC,如果在main()退出后调用std::thread::join()会导致程序挂起

如果使用Clang 3.2或者GCC 4.7在Ubuntu 12.04上编译,下面的示例代码可以成功运行(即不会卡住),但是如果使用VS11 Beta或者VS2012 RC编译,则会卡住。 #include <iostream> #include <string> #...

8得票1回答
Eclipse内容辅助功能无法识别std::thread,但编译正确。

我正在运行Ubuntu 14.04操作系统。 以下是我重现问题所采取的步骤: Create a new C++ project (New -> C++ -> Hello World project), which I called TestStdThread Change t...

8得票1回答
如何检查std::thread是否有效

我有一个类对象,有时只需要启动一个线程。在析构函数中,我希望方便地知道是否存在/曾经存在线程。问题是,我如何检测std :: thread对象是否是有效的线程。 class MyClass { public: ~MyClass() { // Attention p...

203得票6回答
我什么时候应该使用std::thread::detach?

有时我需要使用std::thread来加快我的应用程序。我也知道join()会等待线程完成。这很容易理解,但是调用detach()和不调用它有什么区别呢? 我认为如果没有detach(),线程的方法将独立地使用一个线程。 不分离: void Someclass::Somefunction...

10得票2回答
打印std :: this_thread :: get_id()会输出“非执行线程的线程:: id”?

这曾经完美地运行(然后外星人一定黑入了我的电脑):#include <thread> #include <iostream> int main() { std::cout << std::this_thread::get_id() <<...

49得票3回答
由std::async使用std::launch::async参数启动的线程引发的困惑

我对std::async函数有点困惑。 规范说明: 异步操作的执行方式“好像在新的执行线程中”(C++11 §30.6.8/11)。 那么这究竟是什么意思呢? 在我看来,代码std::future<double> fut = std::async(std::launch::as...