Алгоритм взаимного исключения Дейкстры

Я пытаюсь реализовать алгоритм взаимного исключения Дейкстры в 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

0 ответов

Другие вопросы по тегам