返回介绍

12.13.3 对象稳定性

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

构建在每一个类中的randomize()方法展示了对象稳定性。这种特性使得一个实例中对randomize()的调用独立于其它实例对randomize()的调用,并且独立于其它随机化函数的调用。

例如:

class Foo;
    rand integer x;
endclass

class Bar;
    rand integer y;
endclass

initial begin
    Foo foo = new();
    Bar bar = new();
    integer z;
    void'(foo.randomize());
    // z = $random;
    void'(bar.randomize());
end
  • 为foo.x和bar.y返回的值相互之间是独立的。
  • 对randomize()的调用独立于$random系统调用。如果将上面的z = $random解除注释,那么对foo.x和bar.y的赋值不会发生变化。
  • 每一个实例的随机值由具有一个唯一的源,它们可以被独立地设置种子。当实例被产生的时候,这个随机种子从父线程中获取。
  • 对象可以在使用srandom()方法的任何时候设置种子。
class Foo;
    function new (integer seed);
        // 为this实例设置一个新的种子
        this.srandom(seed);
    endfunction
endclass

一旦产生了一个对象,那么在另外的线程访问对象之前不能保证产生线程能够改变对象的随机状态。因此,最好的方法是对象在它的new方法中自己设置种子而不是在外部设置种子。

一个对象的种子可以从任何线程中设置。然而,一个线程的种子只能在线程本身中设置。

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

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

发布评论

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