source: doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex @ 0faacb8

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

various additions to thesis, finished first draft of actor chapter (lots of polish needed), added first draft of intro to CFA features & intro to CFA threading, added start of mutex stmt chapter

  • Property mode set to 100644
File size: 1.9 KB
Line 
1\chapter{Concurrency in \CFA}\label{s:cfa_concurrency}
2
3The groundwork for concurrency in \CFA was laid by Thierry Delisle in his Master's Thesis\cite{Delisle18}. In that work he introduced coroutines, user level threading, and monitors. Not listed in that work were the other concurrency features that were needed as building blocks, such as locks, futures, and condition variables which he also added to \CFA.
4
5\section{Threading Model}\label{s:threading}
6\CFA has user level threading and supports a $M:N$ threading model where $M$ user threads are scheduled on $N$ cores, where both $M$ and $N$ can be explicitly set by the user. Cores are used by a program by creating instances of a \code{processor} struct. User threads types are defined using the \code{thread} keyword, in the place where a \code{struct} keyword is typically used. For each thread type a corresponding main must be defined, which is where the thread starts running once it is created. Listing~\ref{l:cfa_thd_init} shows an example of processor and thread creation. When processors are added, they are added alongside the existing processor given to each program. Thus if you want $N$ processors you need to allocate $N-1$. To join a thread the thread must be deallocated, either deleted if it is allocated on the heap, or go out of scope if stack allocated. The thread performing the deallocation will wait for the thread being deallocated to terminate before the deallocation can occur. A thread terminates by returning from the main routine where it starts.
7
8\begin{cfacode}[tabsize=3,caption={\CFA user thread and processor creation},label={l:cfa_thd_init}]
9
10thread my_thread {}     // user thread type
11void main( my_thread & this ) { // thread start routine
12    printf("Hello threading world\n");
13}
14
15int main() {
16    // add 2 processors, now 3 total
17    processor p[2];   
18    {
19        my_thread t1;
20        my_thread t2;
21    } // waits for threads to end before going out of scope
22}
23
24\end{cfacode}
Note: See TracBrowser for help on using the repository browser.