草庐IT

thread_func

全部标签

C++:具有 `std::lock_guard` 的互斥量是否足以同步两个 `std::thread`?

我的问题是基于下面的C++代码示例#include#include#include#includeclassClassUtility{public:ClassUtility(){}~ClassUtility(){}voiddo_something(){std::coutlock(g_mutex);std::coutlock(g_mutex);std::cout如果需要,这更像是一个问题,目的是让我的理解更清楚,并获取std::condition_variable的示例用法。我有2个C++std::thread,它们在main方法中启动。它是osx上的控制台应用程序。所以使用clang编

c++ - __func__ 和日志记录

我正在用C++实现一个日志处理程序,它工作得很好,但是我发现有一件事是可用的,那就是记录器从中获取输出的地方。我想这并不是什么大问题,但我偶然发现了__func__标识符,它基本上会保留当前函数的函数名称。所以我在我的Log类中有一个名为Write的静态函数,它需要一个日志级别和一个变化列表。所以我会这样调用它:Log::Write(LOG_DEBUG,"thisisaninteger:%d",10);它会打印:2013-01-02=>10:12:01.366[DEBUG]:thisisaninteger:10但是我认为在消息中也包含调用者可能会很有用,以生成如下内容:2013...=

c++ - Thread Sanitizer 是否可用?

我想尝试线程清洁剂(http://code.google.com/p/data-race-test/wiki/ThreadSanitizer#Using_ThreadSanitizer)所以我做了一个简单的程序:#include#include#include#include#include#includeusingnamespacestd;intviolated=0;mutexmtx;voidviolator(){lock_guardlg(mtx);violated++;}intmain(){threadt1(violator);t1.join();threadt2(violator

c++ - 从 std::thread 调用 boost::asio::io_service::run

我有一个处理我的连接的类,它有一个boost::asio::io_service成员。我想从std::thread调用io_service::run(),但我遇到了编译错误。std::threadrun_thread(&boost::asio::io_service,std::ref(m_io_service));不起作用。我看到了使用boost::thread执行此操作的各种示例,但我想为此坚持使用std::thread。有什么建议么?谢谢 最佳答案 我知道有两种方法,一种是通过lambda创建std::thread。std::t

c++ - 使用 shared_ptr 启动 std::thread

当你构造一个新线程时,提供的函数对象被复制到属于新创建线程的存储中。我想在一个新线程中执行一个对象方法。不应复制该对象。所以我将对象的shared_ptr传递给std::thread构造函数。如何使用std::shared_ptr()对象启动新线程?例如classFoo{public:voidoperator()(){//dosomething}};intmain(){std::shared_ptrfoo_ptr(newFoo);//Iwanttolaunchafoo_ptr()inanewthread//Isthisthecorrectway?std::threadmyThread(

c++ - 为什么是 std::this_thread 命名空间?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。std::this_thread命名空间是否有技术原因?为什么这个命名空间的成员不能作为std::thread类的静态成员实现?

c++ - 为什么写 func( const Class &value ) 更可取?

为什么要使用func(constClass&value)而不仅仅是func(Classvalue)?现代编译器肯定会使用任何一种语法来做最有效的事情。这是否仍然是必要的,或者只是对非优化编译器时代的保留?补充一下,gcc将为这两种语法生成类似的汇编代码输出。也许其他编译器没有?显然,事实并非如此。我很久以前从一些代码中得到的印象是gcc这样做了,但是实验证明这是错误的。感谢MichaelBurr,他对similarquestion的回答如果在这里给出,将被提名。 最佳答案 2个签名之间有2个较大的语义差异。首先是在类型名称中使用&。

GCC 中的 C++11 thread_pool、futures、promises 支持

是N2276中的任何一个gcc支持吗?我目前使用的是4.6.1,其中std::thread似乎工作正常。如果不是,我应该使用boost'sthreadpool?什么是可以轻松过渡到最终futures、promises和thread_pool的良好替代方案/权宜之计?也许this有用吗?N2276似乎没有列出here.我想知道N2276的任何特性是否会被纳入-我想我读到了有关futures和promises以及其他进入C++11的范例:将不得不谷歌看看周围发生了什么。 最佳答案 gccC++librarystatuspage显示其中大

c++ - const ref lvalue to non-const func return value 是否专门减少拷贝?

我遇到了一个C++习惯,我试图研究它以了解它的影响并验证它的用法。但我似乎找不到确切的答案。std::vectorgetThings();voiddo(){conststd::vector&things=getThings();}这里我们有一些返回非const&值的函数。我看到的习惯是在分配函数的返回值时使用const&左值。提出这个习惯的原因是它减少了拷贝。现在我一直在研究RVO(返回值优化)、复制省略和C++11移动语义。我意识到给定的编译器可以选择阻止通过RVO进行复制,不管这里是否使用了const&。但是,在防止复制方面,const&左值的使用对非const&返回值有任何影响吗

c++ - 即使在 num_threads(1) 时,openmp 的性能提升也难以理解

下面几行代码intnrows=4096;intncols=4096;size_tnumel=nrows*ncols;unsignedchar*buff=(unsignedchar*)malloc(numel);unsignedchar*pbuff=buff;#pragmaompparallelforschedule(static),firstprivate(pbuff,nrows,ncols),num_threads(1)for(inti=0;i编译时需要11130usecs在我的i5-3230M上运行g++-omainmain.cpp-std=c++0x-O3也就是说,当openmp