while(1) { // thread i (0 <= i < n)
for (j=1 ; j<n ; j++) {
flag[i]=j;
last[j]=i;
for (k=0 ; k<n ; k++) {
if (k==i) continue;
while (flag[k]>=flag[i] && last[j]==i) {
sleep(random());
}
}
}
// critical section
...
// end of critical section
flag[i]=0;
// not critical section
...
// end of not critical section
}
Chat with our AI personalities