Home Page Image


Threads are an inherit part of software products as a fundamental unit of CPU utilization as a basic building block of multithreaded systems. The use of threads has evolved over the years from each program consisting of a single thread as the path of execution of it. The notion of multithreading is the expansion of the original application thread to multiple threads running in parallel handling multiple events and performing multiple tasks concurrently. Today's modern operating systems foster the ability of multiple threads controlled by a single process all within the same address space. Multithreading brings a higher level of responsiveness to the user as a thread can run while other threads are on hold awaiting instructions. As all threads are contained within a parent process, they share the resourses and memory allocated to the process working within the same address space making it less costly to generate multiple threads vs. Processes. These benefits increase even further when executed on a multiprocessor architechture as multiple threads can run in parallel across multiple processors as only one process may execute on one processor. Threads divide into two types: user‐level threads – visible to developers but unknown to the kernel, and kernel‐level threads – managed by the operating system’s kernel. Three models identify the relationships between user‐level and kernel‐level threads: one‐by‐one, many‐toone, and many‐to‐many. This report explores various notions related to systems with multithreading capability, including POSIX, Win32, and Java thread libraries. Challenges associated to multithreaded program development explored in this report are those of thread cancellation, singnal handling, thread‐specific data, and symantics of necessary system calls.

Full Text Download