-assignment. Furthermore, resist the temptation to directly disable
-interrupts in your solution by calling @func{intr_disable} or
+assignment.
+
+Do your best to resist the temptation to directly disable interrupts
+in your solution by calling @func{intr_disable} or
@func{intr_set_level}, although you may find doing so to be useful
while debugging. Instead, use semaphores, locks and condition
variables to solve synchronization problems. Read the tour section on
@func{intr_set_level}, although you may find doing so to be useful
while debugging. Instead, use semaphores, locks and condition
variables to solve synchronization problems. Read the tour section on
-synchronization (@pxref{Synchronization}) or the comments
-in @file{threads/synch.h} if you're unsure what synchronization
+synchronization (@pxref{Synchronization}) or the comments in
+@file{threads/synch.h} if you're unsure what synchronization
primitives may be used in what situations.
Given some designs of some problems, there may be one or two instances
in which it is appropriate to directly change the interrupt levels
primitives may be used in what situations.
Given some designs of some problems, there may be one or two instances
in which it is appropriate to directly change the interrupt levels