我有一个关于斯科特·梅耶斯(Scott Meyers)写的《有效现代C》第270页的问题。
第5/6行,他写道:“唯一的微妙之处是每个反应线程都需要自己的std::shared_future副本,该副本引用共享状态,…”
我的问题是:为什么我们必须向每个线程中的每个lambda函数传递一份std::shared_future
?然而,根据先验知识,我认为通过引用传递它没有任何问题,比如存在一个唯一的共享状态,不同的线程会使用它?
我写了一个代码,改编自斯科特·迈耶斯博士的书,即使我通过了标准参考,它也是有效的。
因此,是否有可能通过引用来传递它?
#include <future>
#include <vector>
std::promise<void> p;
void react(){}
void detect()
{
auto sf = p.get_future().share();
std::vector<std::thread> vt;
int n=10;
for(int i=0;i < n; i++)
{
vt.emplace_back([sf]{sf.wait();
react();
});
}
p.set_value();
for(auto& t : vt)
t.join();
}
int main()
{
detect();
return 0;
}
如果引用传递,多个线程正在访问shared_future
的同一个实例。这可能会导致数据竞争,并且是未定义的行为。如果多个线程通过自己的shared_future
副本访问共享状态,库会确保它们是同步的。
get
上的参考页面显示:
它有效地调用wait()
,以等待结果。
等待
上的cp首选项页面说:
从多个线程调用相同的std::shared_future
是不安全的;预期的用途是每个在相同共享状态下等待的线程都有一个std::shared_future
的副本。
我需要在我的Jhipster应用程序(4.8.2)的多个站点中共享一个组件,我已经将我的组件添加到文件:: 看起来一切都很顺利,但是那个组件内的NgModel指令已经停止工作了。 如果它是value,我不带指令它读起来很好,问题是当我在带有NgModel指令的“input”中使用它时 有人能帮我解决这个问题吗? 谢谢.
问题内容: 我正在编写一个多线程Java程序,其中每个线程可能都需要将其标准输出重定向到一个单独的文件。每个线程都有其自己的文件。是否可以在“每个线程”的基础上重定向System.out或在所有线程上全局更改System.out? 问题答案: 是否可以基于“每线程”重定向System.out 不,这是不可能的。 是静态的,并且在JVM最初启动时,每个JVM都会作为系统类加载器的一部分进行加载。尽管
ES6标准的一个新特性是Map类,用于创建数据的键:值集合。好,对。但是,为什么Javascript需要这样一个类呢?JS对象表示法实际上也是数据的键:值集合,这还不够吗?那么,有什么区别呢?
我有一个django项目与PostgreS数据库。我需要在docker容器中使用我的本地数据库。如何与docker容器共享机器的localhost?My Docker-compose.yml: Django Settings.py: 我添加了 现在我有一个错误: 谁能帮我?求求你!
阅读Java8的并行流API:https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html 还不清楚在使用这个流式API的并行性时,如何调优要使用的线程数? 计划在一个非常特定的机器类型和一致的数据类型上运行它,所以我想我可以在一组不同的设置上对它进行基准测试,然后使用最佳数量的线程。
如何选择要使用的id文档: 这里,我创建了一个随机id文档,但我想选择一个(我指的是收集任务中文档的id)