However, our model provides multithreaded programming structures that are easier to reason about than unrestricted thread library calls, just as while loops and if statements are easier to reason about than unrestricted assembly code branch instructions. 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.