Commit 284a81b3 authored by Grégory Mounié's avatar Grégory Mounié

mise en page pour le double colonne du td

parent e22121b9
/* Implantation de l'algorithme de dekker en C++ */
/* Vérification du fonctionnement sur l'incrémentation d'une variable
entière non atomique */
/* Implantation de Dekker en C++ */
/* Verification du fonctionnement
sur l'incrementation d'une variable
entière non atomique (mais volatile) */
#include <atomic>
#include <iostream>
#include <thread>
using namespace std;
volatile int compteur = 0; // le compteur changeant magiquement, il
// faut indiquer au compilateur son
// rechargement
constexpr int NBINC_PER_THREAD= 10000;
// le compteur changeant magiquement,
// il faut indiquer au compilateur
// son necessaire rechargement
volatile int compteur = 0;
constexpr int NBINC= 10000;
/* Juste avec volatile */
/* marche pas ! */
void incrementeur(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
for(int i=0; i < NBINC; i++) {
compteur++;
}
}
/* sans opérations atomiques de synchro */
/* Dekker */
/* sans operations atomiques de synchro */
/* juste volatile pour les variables */
/* marche pas non plus ! */
volatile bool fdemande[2] = {};
volatile int ftour;
......@@ -49,14 +56,16 @@ void ffin_sc(int me, int other) {
void incrementeur_fdekker(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
for(int i=0; i < NBINC; i++) {
fdebut_sc(me, other);
compteur++;
ffin_sc(me, other);
}
}
/* avec gestion des écritures synchronisées par C++ */
/* Dekker */
/* avec ecritures synchro. par C++ */
/* semantique seq. (le defaut) */
atomic_bool demande[2] = {};
atomic_int tour;
......@@ -84,7 +93,7 @@ void fin_sc(int me, int other) {
void incrementeur_dekker(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
for(int i=0; i < NBINC; i++) {
debut_sc(me, other);
compteur++;
fin_sc(me, other);
......@@ -93,15 +102,15 @@ void incrementeur_dekker(int me, int other) {
int main(int argc, char **argv) {
cout << u8"** Incrémentation sans dekker **" << endl;
cout << u8"** Increm. sans dekker **" << endl;
thread t1 = thread(incrementeur, 0, 1);
thread t2 = thread(incrementeur, 1, 0);
t1.join();
t2.join();
cout << compteur << "/" << NBINC_PER_THREAD * 2 << endl;
cout << compteur << "/" << NBINC * 2 << endl;
compteur = 0;
cout << u8"** Incrémentation dekker avec juste volatile **" << endl;
cout << u8"** Increm. dekker + volatile **" << endl;
thread t3 = thread(incrementeur_fdekker, 0, 1);
thread t4 = thread(incrementeur_fdekker, 1, 0);
......@@ -109,10 +118,10 @@ int main(int argc, char **argv) {
t3.join();
t4.join();
cout << compteur << "/" << NBINC_PER_THREAD * 2 << endl;
cout << compteur << "/" << NBINC * 2 << endl;
cout << u8"** Incrémentation dekker + variable synchro atomic**" << endl;
cout << u8"** Increm dekker + atomic var **" << endl;
compteur = 0;
thread t5 = thread(incrementeur_dekker, 0, 1);
......@@ -121,6 +130,6 @@ int main(int argc, char **argv) {
t5.join();
t6.join();
cout << compteur << "/" << NBINC_PER_THREAD * 2 << endl;
cout << compteur << "/" << NBINC * 2 << endl;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment