0

is_master_ def:

volatile bool is_master_;

is_master_ value は別のスレッドによって true に設定されていますが、is_master_ value がフラッシュされないようです (FATAL ERROR HAS OCCURRED... はカウントされません)。cout << "foo" < を追加すると

void MasterSlaveSynchronize::validateSingleMaster(){
    if(is_master_){
        cout << "FATAL ERROR HAS OCCURRED BOTH MASTER";
        if(!is_leader_master_){
            cout << "CHOSE AS VICTIM IN MASTER-MATSER. SET THIS HOST AS SLAVE";
            is_master_ = false;
        }
    }
}

発信者コード:

while(1){
        int n = recvfrom(sockId, buf, HEARBEAT_SIZE, 0, (struct sockaddr *) &from,
                &length);
        if (n < 0) {
            REGISTER_ERROR("Failed to recieved hearbeat");
        } else {
            gettimeofday(&instance_->last_hearbeat_got_, NULL);
            instance_->validateSingleMaster();
        }
}
4

1 に答える 1

3

あなたは私のコメントを答えとして投稿してほしいと思っていました:

たぶんそうかもしれませんが、改行を使用しないため、出力ストリームはフラッシュされません。

この動作は、ここでかなりよく説明されています。

書式文字列に改行が含まれていない限り、呼び出し後に printf がフラッシュされないのはなぜですか?

于 2012-10-07T11:04:32.213 に答える