Tag: stdthread

C + + 11:std ::线程池?

在C ++ 03中,我使用了一个自build线程池的pthread,这个线程池始终保持着一些线程的运行(因为pthread_create比较慢),这样我就可以在不考虑性能问题的情况下为小任务启动线程。 现在,在C ++ 11中,我们有std::thread 。 我想标准没有说具体的实现,所以我的问题是关于标准库的实现。 他们通常select一个合并的方法构buildstd::thread是便宜的(例如,不会在posix上调用pthread_create ),或者将std::thread只是一个包装? 换句话说,在C ++ 11中仍然推荐使用线程池,还是只需要创build一个std::thread并将性能提高到标准库?

当main()退出时,分离的线程会发生什么?

假设我开始一个std::thread ,然后detach()它,所以线程继续执行,即使曾经表示它的std::thread超出了范围。 进一步假定程序没有用于join分离线程1的可靠协议,因此当main()退出时分离的线程仍然运行。 我无法find标准中的任何内容(更准确地说,在N3797 C ++ 14草案中),它描述了应该发生的事情,1.10和30.3都没有包含相关的措词。 1另一个可能相同的问题是:“是否可以再次连接一个分离的线程”,因为无论您正在创build哪个协议,都必须在线程仍在运行时完成信号部分,OS调度器可能决定让线程在信号传输完成后立即睡眠一个小时,而接收端无法可靠地检测到线程实际完成。 如果用分离线程运行的main()运行是未定义的行为,那么除非主线程永不退出,否则任何对std::thread::detach()都是未定义的行为。 因此,运行分离线程的main()运行必须具有已定义的效果。 问题是: 在哪里 (在C ++标准中 ,不是POSIX,不是OS文档,…)是定义的那些效果。 2分离的线程不能被连接( std::thread::join() )。 您可以等待来自分离线程的结果(例如,通过来自std::packaged_task的未来,或通过计数信号量或标志和条件variables),但是不能保证线程已经完成执行 。 事实上,除非将信令部分放入线程的第一个自动对象的析构函数中,否则通常会在信号代码之后运行代码(析构函数)。 如果操作系统安排主线程使用结果,并在分离的线程结束运行析构函数之前退出,那么^ Wis定义了什么?

std :: thread通过引用调用复制构造函数

那么我有一个使用std :: thread将数据传递到线程的问题。 我以为我明白了复制构造函数等的一般语义,但似乎我不太明白这个问题。 我有一个简单的类叫做Log,隐藏了它的拷贝构造函数: class Log { public: Log(const char filename[], const bool outputToConsole = false); virtual ~Log(void); //modify behavior void appendStream(std::ostream *); //commit a new message void commitStatus(const std::string str); private: //members std::ofstream fileStream; std::list<std::ostream *> listOfStreams; //disable copy constructor and assignment operator Log(const Log &); Log & operator=(const Log &); } 现在我有一个主要依靠http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/echo/blocking_tcp_echo_server.cpp […]

如何检查一个std ::线程是否仍在运行?

我怎样才能检查一个std::thread是否仍在运行(平台独立的方式)? 它缺lesstimed_join()方法,而timed_join()并不意味着这一点。 我想在线程中使用std::lock_guardlocking一个互斥锁,并使用互斥锁的try_lock()方法来确定它是否仍然被locking(线程正在运行),但对我而言似乎不必要的复杂。 你知道更优雅的方法吗? 更新:要清楚:我想检查线程干净退出或不。 为此,“悬挂”线程被认为正在运行。

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

有时我必须使用std::thread来加速我的应用程序。 我也知道join()等待一个线程完成。 这很容易理解,但调用detach()和不调用它有什么区别? 我认为没有detach() ,线程的方法将独立工作使用一个线程。 不分离: void Someclass::Somefunction() { //… std::thread t([ ] { printf("thread called without detach"); }); //some code here } 呼叫与分离: void Someclass::Somefunction() { //… std::thread t([ ] { printf("thread called with detach"); }); t.detach(); //some code here }

线程池在C + + 11

相关问题 : 关于C ++ 11: C + + 11:std ::线程池? C ++ 11中的async(launch :: async)是否会使线程池过时,以避免昂贵的线程创build? 关于Boost: C ++ boost线程重用线程 boost ::线程并创build它们的池! 我如何获得一个线程池来发送任务 ,而不是一遍又一遍地创build和删除它们? 这意味着持久线程不join就重新同步。 我有这样的代码: namespace { std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += 2; } } int main(int argc, char *argv[]) { for (int i […]