/* atomic-shm.c * gcc -O -o atomic-shm atomic-shm.c */ #include #include #include #include #include #define COUNT (10000000) static void atomic_inc (volatile int *count) { int t0; asm volatile ( "1: \n\t" "ll %[t0], %[count] \n\t" "addiu %[t0], 1 \n\t" "sc %[t0], %[count] \n\t" "beqz %[t0], 1b \n\t" "sync \n\t" :[t0]"+&r"(t0) :[count]"m"(*count) ); } int main (int argc, char *argv[]) { int i; pid_t pid; void *p; p = mmap (NULL, 16384, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); if (MAP_FAILED == p) { fprintf (stderr, "Map shared file failed!\n"); return -1; } pid = fork (); if (-1 == pid) { fprintf (stderr, "Fork failed!\n"); return -2; } for (i=0; i