Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无效承诺、未来与条件变量、互斥_C++_Multithreading_C++11_Concurrency_C++14 - Fatal编程技术网

C++ 无效承诺、未来与条件变量、互斥

C++ 无效承诺、未来与条件变量、互斥,c++,multithreading,c++11,concurrency,c++14,C++,Multithreading,C++11,Concurrency,C++14,请对此提出建议。我正在尝试学习,看看在下面的场景中,是否可以用无效期货代替条件变量 从Scott Meyers有效的现代C++书籍中,他建议使用空洞承诺和无效的未来来进行线程间的一次通信,等待线程可以有一个STD::将来和调用WAITE(),并且调用线程可以调用相应的STD::承诺。(对于多个线程,每个线程都可以有一个空共享未来的副本),但他提到这只能使用一次。这是什么意思 考虑一个应用程序,其中一个主线程在一个有3个槽的向量的每个槽上放置一个功。每个槽有2名工人,只有一名工人可以从槽中挑选工作

请对此提出建议。我正在尝试学习,看看在下面的场景中,是否可以用无效期货代替条件变量

从Scott Meyers有效的现代C++书籍中,他建议使用空洞承诺和无效的未来来进行线程间的一次通信,等待线程可以有一个STD::将来和调用WAITE(),并且调用线程可以调用相应的STD::承诺。(对于多个线程,每个线程都可以有一个空共享未来的副本),但他提到这只能使用一次。这是什么意思

考虑一个应用程序,其中一个主线程在一个有3个槽的向量的每个槽上放置一个功。每个槽有2名工人,只有一名工人可以从槽中挑选工作。我希望船长在每次用新工作填满所有3个插槽时通知所有工人,并在n个单位的时间内睡眠,以便工人完成工作。我需要重复这一点,因此,我可以把主人的承诺传给每个工人一份共享未来的副本吗?根据Scott的说法,promise/future只能使用一次,这是否意味着一旦设置了promise的值,就不能再次使用? 对于这种情况,条件变量互斥是更好的方法吗


请建议何时使用无效承诺、未来与条件变量、互斥?

“但他提到,这只能使用一次。这意味着什么?”未来可以从没有结果到有结果只转换一次。在相同的将来,任何后续的
wait()
都会立即返回。一旦设置了结果,就不能取消设置。对于您的场景,我将使用一个条件变量。我使用@IgorTandetnik。几十年来,有一些解决方案一直行之有效。仅仅因为C++有一个新的库特性并不意味着你需要使用它。