Ich habe ein Projekt von meiner Universität für kritische Abschnitt Problem von n Prozessen. Ich habe einen Code für 2 Prozesse in c gemacht. Aber ich konnte nicht herausfinden, wie man es für den n-Prozess funktioniert. Der Code ist in C für Linux-Threads.Wie man einen Code für kritische Abschnitte in c für n Prozesse erstellt (Bakery Algorithmus)
Hier ist Code für 2 Prozesse.
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int flag[2];
int turn;
const int MAX = 1e9;
int ans = 0;
void lock_init(){
flag[0]=flag[1]=0;
turn = 0;
}
void lock(int self){
flag[self]=1;
turn = 1-self;
while(flag[1-self]==1 && turn == 1-self);
}
void unlock(int self){
flag[self]=0;
}
void* func(void *s){
int i=0;
int *limitptr = (int*) s;
int self = *limitptr;
printf("Thread %d in queue for critical section\n",self);
lock(self);
printf("Thread %d in critical section\n",self);
for(i=0;i<MAX;i++){
ans++;
}
printf("Thread %d done counting\n",self);
printf("Thread %d is exiting critical section\n",self);
unlock(self);
}
int main(){
pthread_t p1, p2;
int a=0,b=1;
lock_init();
pthread_create(&p1, NULL, func, &a);
pthread_create(&p2, NULL, func, &b);
pthread_join(p1, NULL);
pthread_join(p2, NULL);
printf("Exiting Main\n");
return 0;
}
Jede Hilfe wäre willkommen. Danke. :)
Siehe https://en.wikipedia.org/wiki/Peterson % 27s_algorithm – 4386427
oder https://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm – 4386427
Siehe auch: http://stackoverflow.com/questions/11588514/a-test-implementation-of-peterson-lock-algorithm – ninjalj