当前位置: 首页 > 面试题库 >

生成器是线程安全的吗?

吴举
2023-03-14
问题内容

我有一个多线程程序,在其中创建生成器函数,然后将其传递给新线程。我希望它本质上是共享/全局的,以便每个线程都可以从生成器获取下一个值。

使用这样的生成器是否安全?还是会遇到从多个线程访问共享生成器的问题/情况?

如果不是,是否有更好的方法来解决此问题?我需要可以在列表中循环并为任何线程调用它生成下一个值的东西。


问题答案:

它不是线程安全的;同时调用可能交错,并与局部变量混淆。

常用的方法是使用主从模式(在PC中现在称为“农民工模式”)。创建第三个线程来生成数据,并在主服务器和从服务器之间添加一个队列,从服务器将从队列中读取数据,而主服务器将向该队列中写入数据。标准队列模块提供必要的线程安全性,并安排阻塞主服务器,直到从服务器准备读取更多数据为止。



 类似资料:
  • 问题内容: Axis2从WSDL生成的客户端存根是否是线程安全的? 当然,“线程安全”并不是严格定义的术语,因此我至少对以下内容感兴趣: 同一个存根类的 不同 实例是否可以由不同线程同时访问,并且具有与单线程执行相同的有效行为? 同一存根类的 单个 实例是否可以由不同的线程并发地以相同的有效行为与相同的调用以某种任意方式在单线程执行中交织在一起? 您可能还希望使用这里描述的术语(和起源于此)来更精

  • 假设我有下面的代码,并且makePool可以被多个线程调用。我正在使用ThreadFactoryBuilder来确保线程具有唯一的名称。

  • 下面简单脚本并行产生随机数 在使用单个线程时,上述脚本是确定性 然而,当使用多个线程时,它是部分随机,且包含线程之间的相关性(这可能是一个相当大的问题 我明白为什么我的代码不是线程安全的,但我不明白如何使它是线程安全的。是否可以不考虑线程的数量而具有确定性的输出? 目标是使产生与相同的输出(即线程数不会影响对象)。如果这不可能,则目标是产生与相同的输出。

  • 问题内容: 在中,此变量被声明为是我的问题,在某些调用之后检查值还是在多线程代码中使用perror()是安全的。这是线程安全变量吗?如果没有,那还有什么选择呢? 我在x86体系结构上将Linux与gcc一起使用。 问题答案: 是的,它是线程安全的。在Linux上,全局errno变量是特定于线程的。POSIX要求errno必须是线程安全的。 参见http://www.unix.org/whitepa

  • 问题内容: 我们在项目中使用了Drools kieSessions。许多线程可以创建新的kieSession。有时在创建会话时线程可能会挂起。因此,问题是: 首先 是kieContainer.newKieSession线程安全操作吗? 上吊的原因可能是肮脏的文字或阅读的kie会话集之类的东西吗? 问题答案: 当我在实践中检查 不是线程安全的操作。

  • 问题内容: 在Java中:线程安全吗,即返回的迭代器是在任何时候反映列表的当前状态,还是仅在创建列表时反映列表的状态? 问题答案: List.iterator()的行为未定义或与其他List实现保持一致。 对于ArrayList,LinkedList,如果在迭代列表时对其进行了修改,则可以获得ConcurrentModificationException。(这不能保证)避免此问题的方法是使用syn