} } If this code was executed by a single processor to determine the value of , that processor would create a frame for , and execute lines 1 through 5. On line 6, it would create spaces in the frame to hold the values of and . On line 8, the processor would have to suspend the current frame, create a new frame to execute the procedure , execute the code of that frame until reaching a return statement, and then resume the frame with the value of fib(1) placed into 's variable. On the next line, it would need to suspend again to execute and place the result in 's variable. When the code is executed on a multiprocessor machine, however, execution proceeds differently. One processor starts the execution of ; when it reaches line 8, however, the keyword modifying the call to tells the processor that it can safely give the job to a second processor: this second processor can create a frame for , execute its code, and store its result in 's frame when it finishes; the first processor continues executing the code of at the same time. A processor is not obligated to assign a spawned procedure elsewhere; if the machine only has two processors and the second is still busy on when the processor executing gets to the procedure call, the first processor will suspend and execute itself, as it would if it were the only processor. Of course, if another processor is available, then it will be called into service, and all three processors would be executing separate frames simultaneously. (The preceding description is not entirely accurate. Even though the common terminology for discussing Cilk refers to processors making the decision to spawn off work to other processors, it is actually the scheduler which assigns procedures to processors for execution, using a policy called work-stealing, described later.) If the processor executing were to execute line 13 before both of the other processors had completed their frames, it would generate an incorrect result or an error; would be trying to add the values stored in and , but one or both of those values would be missing. This is the purpose of the keyword, which we see in line 11: it tells the processor executing a frame that it must suspend its own execution until all the procedure calls it has spawned off