source: doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex @ 9317419

ADTast-experimental
Last change on this file since 9317419 was 2d831a1, checked in by caparsons <caparson@…>, 14 months ago

added various small edits and resolved some action items

  • 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.
[2d831a1]32A thread is implicitly joined at deallocation, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.
[deeda09]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.