コーディングスタイルについて質問です。外部向けでありながらロックを適切に処理する関数を作成するにはどうすればよいですか。
void Timer_start(Timer *t){ //this is a user facing function
if (t->state == Timer_paused){
Timer_resume(t);
} else {
Timer_initialize(t);
}
}
void Timer_resume(Timer *t){ //this is also a user facing function
Lock_acquire(t->lock);
//...do work
Lock_release(t->lock);
}
void Timer_initialize(Timer *t){ //and so is this
//...do work (just to illustrate the the functions arent necessarily simply wrapped with the locking functions)
Lock_acquire(t->lock);
//...do work
Lock_release(t->lock);
}
この例では、状態チェックの直後に中断される可能性があるため、他の 2 つの関数と同様Timer_start
にラップする必要があります。問題は、呼び出された関数自体がロックを取得するため、適切なロック関数で関数をラップできないことです。この問題をうまく処理するコーディング スタイルはありますか?Lock_acquire
Lock_release