返回介绍

12.13.2 线程稳定性

发布于 2020-09-09 22:55:51 字数 585 浏览 1064 评论 0 收藏 0

从$urandom系统调用返回的随机值独立于线程的执行顺序。例如:

integer x, y, z;

fork
    // 在线程的起始处设置一个种子
    begin process::self.srandom(100); x = $urandom; end

    // 在一个线程执行期间设置一个种子
    begin y = $urandom; process::self.srandom(200); end

    // 从线程RNG中移动2个值
    begin z = $urandom + $urandom; end
join

上面的程序片断演示了几个特性:

  • 线程局部性。为x、y和z返回的值独立于线程执行的顺序。这是一个很重要的特性,因为它使得子系统的开发具有独立性、可控性和可预测性。
  • 层次化播种。当一个线程被产生的时候,它的随机状态在初始化的时候将来自父线程的下一个随机值作为种子。这三个分叉的线程都从父线程中设置种子。

每一个线程都使用一个唯一的值设置种子,种子主要由它的父线程确定。一个线程执行子树的根确定了它的子线程的随机播种。这就使得整个子树可以被移动,并通过手工为它们的根线程设置种子来保留它们的行为。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文