Алгоритм взаимного исключения Дейкстры
Я пытаюсь реализовать алгоритм взаимного исключения Дейкстры в C с OpenMP, алгоритм выглядит следующим образом: {1}:
Тем не менее, с моим кодом только Po будет вводить en, оставляя критический раздел, но я не знаю почему. Кто-нибудь может мне помочь?
Мой код:
int main (int arg, char* argv[]){
int N = strtol(argv[1], NULL, 10);
//Dijkstra shared variables
bool b[N];
bool c[N];
int k;
int i;
int j;
#pragma omp parallel num_threads(N) shared(b, c, k, N) private (i,j)
{
i = omp_get_thread_num();
Li0:
b[i] = false;
Li1:
if(k != i){
c[i] = true;
if(b[k] == 1){
k = i;
}
goto Li1;
}
if (k == i){
c[i] = false;
for(j=0; j<N; j++){
if(j != i && c[j] == 0){
goto Li1;
}
}
}
//Critical section
printf("P(%d) enters the critical section \n", i);
//sleep(5);
printf("P(%d) leaves the critical section \n", i);
c[i] = true;
b[i] = true;
goto Li0;
}
return 0;
}
{1} = http://www.di.ens.fr/~pouzet/cours/systeme/bib/dijkstra.pdf