Skip to content

Commit f644ad2

Browse files
authored
Merge pull request #18 from weiso131/main
Add required flags to example Makefile
2 parents 68dae00 + 1a4d1f7 commit f644ad2

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

concurrency-primer.tex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ \subsection{example}
529529
\end{ccode}
530530

531531
\textbf{Exchange}
532-
In function \monobox{thread\_pool\_destroy}, \monobox{atomic\_exchange(\&thrd\_pool->state, cancelled)} reads the current state and replaces it with ``cancelled''.
532+
In function \monobox{tpool\_destroy}, \monobox{atomic\_exchange(\&thrd\_pool->state, cancelled)} reads the current state and replaces it with ``cancelled''.
533533
A warning message is printed if the pool is destroyed while workers are still ``running''.
534534
If the exchange is not performed atomically, we may initially get the state as ``running''. Subsequently, a thread could set the state to ``cancelled'' after finishing the last one, resulting in a false warning.
535535

@@ -541,7 +541,7 @@ \subsection{example}
541541
This indicates that the main thread will wail until the worker completes the job and returns ownership back to the main thread, which ensures correct cooperation.
542542

543543
\textbf{Fetch and…}
544-
In the function \monobox{thread\_pool\_destroy}, \monobox{atomic\_fetch\_and} is utilized as a means to set the state to ``idle''.
544+
In the function \monobox{tpool\_destroy}, \monobox{atomic\_fetch\_and} is utilized as a means to set the state to ``idle''.
545545
Yet, in this case, it is not necessary, as the pool needs to be reinitialized for further use regardless.
546546
Its return value could be further utilized, for instance, to report the previous state and perform additional actions.
547547

@@ -959,7 +959,7 @@ \subsection{ABA problem}
959959
On x86-64 processors, for atomic instructions that load or store more than a CPU word size, it needs additional hardware support.
960960
You can use \monobox{grep cx16 /proc/cpuinfo} to check if the processor supports 16-byte compare-and-swap.
961961
For hardware that does not support the desired size, software implementations which may have locks involve are used instead, as mentioned in \secref{atomictype}.
962-
Back to the example, ABA problem in the following code is fixed by using an version number that increments each time a job is added to the empty queue. On x86-64, add a compiler flag \monobox{-mcx16} to enable 16-byte compare-and-swap in \monobox{worker} function.
962+
Back to the example, ABA problem in the following code is fixed by using an version number that increments each time a job is added to the empty queue. On x86-64, add a compiler flag \monobox{-mcx16} to enable 16-byte compare-and-swap in \monobox{worker} function.\footnote{When using \texttt{-mcx16}, programs relying on 16-byte atomic operations (e.g., using \texttt{\_\_int128}) may require linking with \texttt{-latomic}, as these operations are implemented via function calls to \texttt{libatomic} on some systems. See \url{https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104688}.}
963963

964964
\inputminted{c}{./examples/rmw_example_aba.c}
965965

0 commit comments

Comments
 (0)