Summary: Parallelism in modern machines ranges from desk-tops to teraflops. It starts at the level of workstations, which are being increasingly designed as symmetric multiprocessors (SMPs), and scales up to large-scale distributed memory machines whose individual nodes are SMPs. On the software side, object-oriented and multithreading paradigms are both becoming important in software development for high-performance computing. Multithreading techniques have been used at the hardware and the operating system level to interleave computation and to overlap computation with other operations such as communication, I/O, and resource management. Lately, providing multithreading at the level of libraries and application programs has generated much interest. We describe a system named ${\it $Coir} that combines the important aspects of multithreading with object-oriented paradigms in C++ to model the two important aspects of parallel programming — control and data-parallelism. The system provides parallelism as a C++ library and models a wide range of machines from small-scale symmetric multiprocessors to large-scale distributed address space message-passing machines.