code pickup_lfork(PhilsPtr self, TaskPtr current_task)
{
if (self->left_fork->owner == NULL) {
self->left_fork->owner = self;
self->next = pickup_rfork;
goto scheduler(self, current_task);
} else {
self->next = hungry1;
goto scheduler(self, current_task);
}
__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}
状態遷移モデル
論理モデル
組み合わせモデル
フローモデル ..etc
構成要素 | |
---|---|
状態 | プログラムの状態 |
初期状態 | 何らかの処理、計算が行われる前の状態 |
終了状態 | 処理、または計算が行われた状態 |
処理(計算) | 状態を変化させる |
遷移条件 | 状態が分岐する際の条件 |
Pickup Right fork
Pickup Left fork
eating
Put Right fork
Put Left fork
Thinking
v- 5つのスレッドで行われる処理の状態は6つあり、それぞれを状態変数で表す。