more blabla again and again

This commit is contained in:
2020-11-25 14:24:19 +01:00
parent 76c10fe9f4
commit 8684520c5a
7 changed files with 135 additions and 14 deletions

View File

@@ -20,8 +20,38 @@ memory (data and heap segments), but each thread has its own stack
Et c'est là que les ennuis potentiels débarquent :
\textit{share the same global memory}, ce qui veut dire en gros
«~se partagent la même mémoire globale~».
«~se partagent la même mémoire globale~». Et en français de tous
les jours, «~ils vont se marcher sur les pieds~».
D'un autre coté, ce paradigme permet de faire des choses assez
choupi, comme un synthétiseur d'évènement.
% ----------------------------------------------------------------
\section{Un exemple}
Nous allons partir sur un exemple peu réaliste, mais simple
à comprendre. Nous aurons un seul fil d'exécution qui affichera
un compteur, puis l'incrémentera. Pendant ce temps, la branche
principale du programme mettra du random dans le compteur, en
espérant perturber l'autre branche.
\lstinputlisting[language=c]{code/thread-demo.c}
Voilà, nous avons là deux \textsl{race conditions} qui
peuvent avoir des effets pervers~: Ils vont
effectivement se marcher sur les pieds.
Dans le thread
(la fonction \texttt{fil}), le
compteur est incrémenté, \textbf{puis} il est affiché.
Si la branche principale poke du random dans le compteur
entre ces deux opérations, *paf* le chien.
Et réciproquement, si le \texttt{main} pose son aléa dans
le compteur, \textbf{puis} l'affiche, cet aléa peut avoir
été incrémenté par l'autre partie du processus.
%
% ----------------------------------------------------------------
\section{ITC}
@@ -39,12 +69,7 @@ Comment allons-nous procéder\footnote{Et c'est une vraie question !} ?
Une première piste : http://tools.ietf.org/html/rfc3117
% ----------------------------------------------------------------
\section{Un exemple}
XXX\index{XXX}
% ----------------------------------------------------------------
% ----------------------------------------------------------------