Our multithreaded programming structures restrict nondeterminacy, thereby allowing sequential reasoning about multithreaded execution. However, unlike automatic parallelization, there is a direct mapping from the program to the operational details that determine multithreaded performance. In particular, the programmer directly controls every thread creation and synchronization operation. Pragmas for structured thread creation, based on ordinary blocks and for loops. Library calls for structured synchronization, based on Boolean flags and integer counters.
Multithreaded execution is deterministic and produces the same results as sequential execution.
Lock synchronization for nondeterminacy. Barrier synchronization for efficiency. Therefore, the entire system is highly portable. Sequential Development and Multithreaded Performance One of the major strengths of Sthreads is that it allows efficient multithreaded programs to be developed using standard sequential techniques, prior to multithreaded execution for performance. For deterministic algorithms, most development, testing, and debugging is performed in sequential mode, then performance analysis and production runs are performed in multithreaded mode.