Commit 2ee60c85 authored by Grégory Mounié's avatar Grégory Mounié

implantaton avec volatile qui ne marche pas non plus

parent b8821a54
......@@ -13,6 +13,50 @@ volatile int compteur = 0; // le compteur changeant magiquement, il
constexpr int NBINC_PER_THREAD= 10000;
/* Juste avec volatile */
void incrementeur(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
compteur++;
}
}
/* sans opérations atomiques de synchro */
volatile bool fdemande[2] = {};
volatile int ftour;
void fdebut_sc(int me, int other) {
debut:
fdemande[me] = true;
if (fdemande[other]) {
if (ftour == me) {
while(fdemande[other]);
}
else {
fdemande[me] = false;
while(ftour != me);
goto debut;
}
}
}
void ffin_sc(int me, int other) {
ftour = other;
fdemande[me] = false;
}
void incrementeur_fdekker(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
fdebut_sc(me, other);
compteur++;
ffin_sc(me, other);
}
}
/* avec gestion des écritures synchronisées par C++ */
atomic_bool demande[2] = {};
atomic_int tour;
......@@ -38,11 +82,6 @@ void fin_sc(int me, int other) {
}
void incrementeur(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
compteur++;
}
}
void incrementeur_dekker(int me, int other) {
for(int i=0; i < NBINC_PER_THREAD; i++) {
......@@ -62,14 +101,26 @@ int main(int argc, char **argv) {
t2.join();
cout << compteur << "/" << NBINC_PER_THREAD * 2 << endl;
compteur = 0;
cout << u8"** Incrémentation sans dekker **" << endl;
cout << u8"** Incrémentation dekker avec juste volatile **" << endl;
thread t3 = thread(incrementeur_dekker, 0, 1);
thread t4 = thread(incrementeur_dekker, 1, 0);
thread t3 = thread(incrementeur_fdekker, 0, 1);
thread t4 = thread(incrementeur_fdekker, 1, 0);
t3.join();
t4.join();
cout << compteur << "/" << NBINC_PER_THREAD * 2 << endl;
cout << u8"** Incrémentation dekker + variable synchro atomic**" << endl;
compteur = 0;
thread t5 = thread(incrementeur_dekker, 0, 1);
thread t6 = thread(incrementeur_dekker, 1, 0);
t5.join();
t6.join();
cout << compteur << "/" << NBINC_PER_THREAD * 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