Questions tagged «stdthread»

6
当main()退出时,一个分离的线程会怎样?
假设我先启动一个std::thread,然后启动detach()它,那么即使std::thread那个曾经代表它,但超出范围,线程仍继续执行。 进一步假定该程序不具有用于加入分离线程1的可靠协议,因此分离线程在main()退出时仍然运行。 我无法在标准(更确切地说,在N3797 C ++ 14草案中)中找到任何内容,该标准描述了应该发生的情况,无论1.10还是30.3都没有相关的措辞。 1另一个可能等效的问题是:“是否可以再次连接一个分离的线程”,因为无论您想加入哪种协议,都必须在线程仍在运行时完成信令部分,并且OS调度程序可能决定在执行信令后立即使线程休眠一个小时,而接收端无法可靠地检测到线程实际上已完成。 如果main()用分离的线程运行时耗尽是未定义的行为,则除非主线程永不退出2,否则对的任何使用std::thread::detach()都是未定义的行为。 因此,main()用分离的线程运行时用尽必须具有定义的效果。问题是:在哪里定义了这些效果(在C ++标准中,不是POSIX,不是OS docs,...)。 2分离的线程无法连接(在的意义上std::thread::join())。您可以等待来自分离线程的结果(例如,通过来自的Future std::packaged_task或通过计数信号量或标志和条件变量),但这不能保证线程已完成执行。事实上,除非你把信令部分进入线程的第一个自动对象的析构函数,也将在一般情况下,是代码(析构函数),其运行后的信号代码。如果操作系统安排主线程使用结果并在分离的线程完成运行所述析构函数之前退出,那么将定义发生什么?

5
我什么时候应该使用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 }
140 c++  c++11  stdthread 

10
C ++ 11中的线程池
相关问题: 关于C ++ 11: C ++ 11:std :: thread池化了吗? 为了避免昂贵的线程创建,C ++ 11中的async(launch :: async)是否会使线程池过时? 关于Boost: C ++ Boost线程重用线程 boost :: thread并创建它们的池! 我如何获得一个线程池以将任务发送到,而不是一遍又一遍地创建和删除它们?这意味着持久线程无需加入即可重新同步。 我有看起来像这样的代码: 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[]) { …

6
如何检查std :: thread是否仍在运行?
如何检查astd::thread是否仍在运行(以独立于平台的方式)?它缺少一种timed_join()方法,joinable()并不意味着要这样做。 我曾考虑过std::lock_guard在线程中使用a锁定互斥锁,并使用try_lock()互斥锁的方法来确定它是否仍处于锁定状态(线程正在运行),但是这对我来说似乎不必要。 您知道更优雅的方法吗? 更新:要明确:我想检查线程是否干净退出。为此,一个“挂起”线程被认为正在运行。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.