Witajcie,
Tutaj tworzę będę miał trzy procesy - jeden macierzysty, który tylko rodzi dwa procesy potomne, to właśnie te procesy będą współzawodniczyły o sekcję krytyczna.
Chcę prosić Was ocenę tego kodu. Czasem na konsoli widzę następujący przebieg:
jestem w sekcji krytycznej! 6041
wyszedlem z sekcji krytycznej! 6039
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#define false 0
#define true 1
int chce1 = false, chce2 = false;
int kto_czeka = 1;
int main(){
pid_t child_pid_1, child_pid_2;
printf ("ID procesu głownego %d\n", (int)getpid());
char *arg_list[] = {"ls", "/" } ;
child_pid_1 = fork ();
child_pid_2 = fork ();
while (1){
if (child_pid_1 != 0){
while (1){
chce1 = true;
kto_czeka = 1;
while (chce2 == true && kto_czeka == 1) { ;}
{
printf ("jestem w sekcji krytycznej! %d \n", (int) getpid());
}
printf ("wyszedlem z sekcji krytycznej! %d \n", (int)getpid());
chce1 = false;
}
//printf ("process potomny %d\n", (int)getpid());
}
else if (child_pid_2 != 0){
while (1){
chce2 = true;
kto_czeka = 2;
while (chce1 == true && kto_czeka == 2) { ;}
{
printf ("jestem w sekcji krytycznej! %d \n", (int) getpid());
}
printf ("wyszedlem z sekcji krytycznej! %d \n", (int)getpid());
chce2 = false;
}
//printf ("process potomny %d\n", (int)getpid());
}
else{
printf ("proces rodzica%d: \n", (int)getpid());
}
}
return 0;
}
Zastanawiam się czy to na pewno oznacza błąd? Jeśli tak to jak go poprawić ?