Warning: Undefined array key "view" in /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php on line 47
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php on line 48
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php on line 49
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php on line 50
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1617/lab-examples/index.php on line 51
/**
* Esempio che evidenzia le corse critica ma basato su
* mappatura anonima di file
*/
#include
#include
#include
#include
#include
int main() {
int *conto;
int temp, versamento = 1000;
if ((conto = (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0)) == MAP_FAILED) {
perror("mmap");
exit(1);
}
*conto = 0;
if (fork() == 0) { // primo figlio
for (; versamento > 0; versamento--) {
//(*conto)++;
temp = *conto;
printf("P1: letto=%d\t scritto=%d\n", temp, temp + 1);
*conto = temp + 1;
usleep(rand() % 5000);
}
exit(0);
} else if (fork() == 0) { // secondo figlio
for (; versamento > 0; versamento--) {
//(*conto)++;
temp = *conto;
printf("P2: letto=%d\t scritto=%d\n", temp, temp + 1);
*conto = temp + 1;
usleep(rand() % 5000);
}
exit(0);
}
// aspetta che finiscano entrambi i figli
wait(NULL);
wait(NULL);
printf("Padre: valore finale=%d\n", *conto);
exit(0);
}