草庐IT

future-swap

全部标签

c++ - 关于 swap() 操作的异常安全——这有什么问题?

我一直在阅读swap()操作,例如:templatevoidswap(T&a,T&b){Ttemp(a);a=b;b=temp;}在我们处理异常安全时是有问题的。这有什么问题?此外,我们如何解决它? 最佳答案 在一般实现中,假设T的任何操作可以throw,您不能提供强异常保证,这意味着在发生异常时完全保持操作之前的状态。即使每个操作都在T上进行提供强大的异常保证:templatevoidswap(T&a,T&b){Ttemp(a);//[1]a=b;//[2]b=temp;//[3]}如果[1]抛出异常,则输入保持不变,这很好。如果

c++ - 为什么 swap 在 C++ 中不使用 Xor 操作

我了解到异或运算可以用来实现有效的交换功能。像这样:templatevoidswap(T&a,T&b){a=a^b;b=a^b;a=a^b;}但是我在网上能找到的swap实现基本上是这样的:templatevoidswap(T&a,T&b){Ttemp(a);a=b;b=temp;}编译器似乎没有为上面的两种形式生成相同的代码,因为我在VC++2010上对其进行了测试,第一个比std::swap更快地完成了工作。第一个有便携性或任何其他问题吗?请随时纠正我的任何错误,因为我不是英语母语,也不擅长C++。(编者注:测试可能是使用未优化的调试版本完成的,而不是std::swap可以内联的发

c++ - 为什么在分配器中允许 `propagate_on_container_swap == false`,因为它可能导致未定义的行为?

注意:最初由MattMcnabb提问作为comment在WhycanswappingstandardlibrarycontainersbeproblematicinC++11(involvingallocators)?.标准(N3797)说如果progagate_on_container_swapAllocator内部是std::false_type如果所涉及的两个分配器比较不相等,它将产生未定义的行为。为什么标准会允许这样的构造,因为它看起来非常危险?23.2.1p9GeneralContainerRequirements[container.requirements.general

c++ - std::list<std::future> 析构函数不阻塞

我有一个多线程应用程序,有一个循环等待用户输入作为主线程。在正确的输入上,它应该停止循环并等待所有其他线程正确结束。为此,我创建了一个std::list,其中放置了为创建线程而创建的std::future对象std::list>threads;threads.emplace_front(std::async(std::launch::async,...));我的印象是,让list超出范围应该阻塞,直到所有线程返回它们的main函数,因为list的析构函数将destrurct所有std::future元素和thedestructorofthose将等待线程完成。编辑:因为它是相关的,所以

c++ - std::swap 是否仍会通过在 C++0x 中包含算法来定义?

swap功能模板已从移出至在C++0x中。前者在C++0x中包含后者吗?或者它们是否都包含一个共同的header定义swap?换句话说,下面的代码是否保证可以在C++0x中编译?#include//willthispullinstd::swap?//...usingstd::swap;swap(a,b); 最佳答案 FDIS(n3290),在附件C,“兼容性”,C.2.7中说:17.6.3.2Effectonoriginalfeature:FunctionswapmovedtoadifferentheaderRationale:Remo

c++ - 带有状态分配器的 std::vector::swap() 是否应该使所有迭代器失效?

给定分配器a1和a2,其中a1!=a2,和std::vectorv1(a1)和v2(a2)然后v1.swap(v2)使所有迭代器无效。这是预期的行为吗? 最佳答案 一般来说,swap从不使迭代器无效。然而,当分配器不同时,另一条规则开始发挥作用。在这种情况下,行为取决于allocator_traits::propagate_on_container_swap::value和allocator_traits::propagate_on_container_swap::value.如果两者都为真,则分配器与数据一起交换,所有迭代器仍然有

c++ - 异常传播和 std::future

我的理解是,当一个异步操作抛出异常时,它会传播回一个调用std::future::get()的线程。然而,当这样的线程调用std::future::wait()时,异常不会立即传播-它会在随后调用std::future::得到()。但是,在这种情况下,如果在调用std::future::wait()之后future对象超出范围,但在之前调用std::future::get()?对于那些感兴趣的人,这里有一个简单的例子。在这种情况下,异常由thread/future包静默处理:#include"stdafx.h"#include#include#includeint32_tDoWork(

python - 为什么在使用 concurrent.futures.ProcessPoolExecuter() 进行多处理期间不止一次打印此消息?

“我应该只出现一次”这句话应该只出现一次。我无法理解为什么它又出现了3次...我很清楚我的代码正在执行3个进一步的进程。但是在这3个进程中,只有funktion0()被调用。为什么声明“我应该只出现一次”包含在这额外的3个进程中?有人可以解释一下吗?代码:fromdatetimeimportdatetime#print(datetime.now().time())fromtimeimporttime,sleep#print(time())print("Ishouldappearonlyonce")fromconcurrentimportfuturesdeffunktion0(arg0)

c++ - 将 C++11 async/futures 与 Windows 异步 IO 相结合的最佳 API 是什么?

特别是即将推出的Windows8(带有Metro)将要求任何IO异步编程。在C#/.Net中似乎有特殊的await和类似的构造,JavaScriptAPI将有自己的机制来实现它。什么是C++11集成?对于现代(或即将推出的)Windows,这是一个简洁的示例(例如,从文件中读取图像以供显示吗?)?如果它使用C++11功能,我希望涉及async或future吗? 最佳答案 TipsandtricksfordevelopingMetrostyleappsusingC++演示文稿在59:13介绍了这一点。原始接口(interface)使用

c# - 十年后C#的 future 将是什么?

Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。11年前关闭。我以为我会在大学学习