A thread is a single sequential flow of control. A multithreaded program allows multiple threads of control within a process. Multithreading was developed because of the unsuitability of the process model as a unit of execution (i.e., a thread of control) for concurrent applications consisting of multiple independent tasks which had to interact with each other. Threads as we know them today were first introduced in the early 1980's in several microkernel based research operating systems. Today almost all modern operating systems offer kernel support for multithreading. In addition, a large number of user level multithreading libraries have also been developed. These user level threads can be used even on systems without kernel thread support This paper describes some of the more important implementations of multithreading. Both commercial and research multithreading packages are described. The strengths and weaknesses of each implementation are presented. In addition the problems which..