source: doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex @ 7bef8cf

ADTast-experimental
Last change on this file since 7bef8cf was 21d1c9c, checked in by Peter A. Buhr <pabuhr@…>, 18 months ago

small updates

  • Property mode set to 100644
File size: 2.1 KB
RevLine 
[0faacb8]1\chapter{Concurrency in \CFA}\label{s:cfa_concurrency}
2
[deeda09]3The groundwork for concurrency in \CFA was laid by Thierry Delisle in his Master's Thesis~\cite{Delisle18}.
4In that work, he introduced generators, coroutines, monitors, and user-level threading.
5Not listed in that work were basic concurrency features needed as building blocks, such as locks, futures, and condition variables, which he also added to \CFA.
[0faacb8]6
7\section{Threading Model}\label{s:threading}
[deeda09]8\CFA provides user-level threading and supports an $M$:$N$ threading model where $M$ user threads are scheduled on $N$ kernel threads, where both $M$ and $N$ can be explicitly set by the user.
[21d1c9c]9Kernel threads are created by declaring a @processor@ structure.
[deeda09]10User-thread types are defined by creating a @thread@ aggregate-type, \ie replace @struct@ with @thread@.
11For each thread type a corresponding @main@ routine must be defined, which is where the thread starts running once it is created.
12Examples of \CFA  user thread and processor creation are shown in \VRef[Listing]{l:cfa_thd_init}.
[0faacb8]13
[deeda09]14\begin{cfa}[caption={Example of \CFA user thread and processor creation},label={l:cfa_thd_init}]
15@thread@ my_thread {...};                       $\C{// user thread type}$
16void @main@( my_thread & this ) {       $\C{// thread start routine}$
17        sout | "Hello threading world";
[0faacb8]18}
19
20int main() {
[4541b09]21        @processor@ p[2];                               $\C{// add 2 processors = 3 total with starting processor}$
[deeda09]22        {
23                my_thread t[2], * t3 = new();   $\C{// create 3 user threads, running in main routine}$
24                ... // execute concurrently
25                delete( t3 );                           $\C{// wait for thread to end and deallocate}$
[4541b09]26        } // wait for threads to end and deallocate
[0faacb8]27}
[deeda09]28\end{cfa}
29
30When processors are added, they are added alongside the existing processor given to each program.
31Thus, for $N$ processors, allocate $N-1$ processors.
32A thread is implicitly joined at deallocated, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.
33The thread performing the deallocation must wait for the thread to terminate before the deallocation can occur.
34A thread terminates by returning from the main routine where it starts.
[0faacb8]35
[deeda09]36% Local Variables: %
37% tab-width: 4 %
38% End: %
Note: See TracBrowser for help on using the repository browser.