Figure
shows an example hello-world-like child thread.
As noted earlier, each thread is allocated its own stack, so
each thread has its own private arg argument and myarg variable.
Each child simply prints its argument and its smp_thread_id()
before exiting.
Note that the return statement on line 7 terminates the thread,
returning a NULL to whoever invokes wait_thread() on this
thread.
The parent program is shown in
Figure .
It invokes smp_init() to initialize the threading system on
line 6,
parse arguments on lines 7-14, and announces its presence on line 15.
It creates the specified number of child threads on lines 16-17,
and waits for them to complete on line 18.
Note that wait_all_threads() discards the threads return values,
as in this case they are all NULL, which is not very interesting.