The performance of threads is limited primarily by the overhead of two kinds of switching: vertical switching (user/kernel domain switching) and horizontal switching (context switching between threads). Although these switchings are indispensable in some situations, existing thread mechanisms involve unnecessary switchingson multiprogrammed systems, because of inappropriateinterfaces between the operating system kernel and user-level programs. This paper presents a set of interfaces between the kernel and user-level programs that minimizes the overhead of the two kinds of switchings. The kernel provides ‘unstable threads,’ which are controlled solely by the kernel, whileeach user-level program monitorsthemand gives suggestionson theiractivitiesto thekernel throughashared memory area between the kernel and user address spaces. This new way of separating thread management minimizes the overhead of vertical and horizontal switchings.