-/* Creates a new kernel thread named NAME, which executes
- FUNCTION passing AUX as the argument. The thread is added to
- the ready queue. Thus, it may be scheduled even before
- thread_create() returns. If you need to ensure ordering, then
- use synchronization, such as a semaphore. */
-struct thread *
-thread_create (const char *name, void (*function) (void *aux), void *aux)
+/* Prints thread statistics. */
+void
+thread_print_stats (void)
+{
+ printf ("Thread: %lld idle ticks, %lld kernel ticks, %lld user ticks\n",
+ idle_ticks, kernel_ticks, user_ticks);
+}
+
+/* Creates a new kernel thread named NAME with the given initial
+ PRIORITY, which executes FUNCTION passing AUX as the argument,
+ and adds it to the ready queue. Returns the thread identifier
+ for the new thread, or TID_ERROR if creation fails.
+
+ If thread_start() has been called, then the new thread may be
+ scheduled before thread_create() returns. It could even exit
+ before thread_create() returns. Contrariwise, the original
+ thread may run for any amount of time before the new thread is
+ scheduled. Use a semaphore or some other form of
+ synchronization if you need to ensure ordering.
+
+ The code provided sets the new thread's `priority' member to
+ PRIORITY, but no actual priority scheduling is implemented.
+ Priority scheduling is the goal of Problem 1-3. */
+tid_t
+thread_create (const char *name, int priority,
+ thread_func *function, void *aux)