1

rこれは、インスタンスはインスタンス化子とどのように通信できますか? からのフォローアップの質問です。

次のような場合、メソッド signal() が B の 2 つのインスタンスによって同時に呼び出されると、すべての B が reset() を 2 回呼び出すという競合が発生します。解決するにはどうすればよいですか?

すべての B がリセットを完了した場合にのみ、リセットを引き起こすイベントが発生した場合、リセットしても問題ありません。

public class A {
    private B b[];

    public A() {
        //for loop
        b[i] = new B(this);
    }

    public void signal() {
        //tells every B to reset.
        //for loop
        b[i].reset();
    }
}

public class B {
    A creator;

    public B(A creator) {
        this.creator = creator;
    }

    public void reset() {
        //very critical operation that should not happen back to back
    }

    public void main(String[] args) {

        while(true)
            if(isBad()==true) {
                //Something bad happen. Tell A to reset everyone.
                creator.signal();
            }

   }
}
4

0 に答える 0