Hello. My question is: why doesn't the spinlock in "shm1a" end, when i write data to *pomnilnik in "shm1b"? shm1a: #include <stdio.h>#include <stdlib.h> #include <sys/shm.h> #include <sys/sem.h> #include <errno.h> #include <sched.h> #include <string.h> #include <unistd.h> int main() { int skupniPomnilnik; int skupniPomnilnik2; int* pomnilnik; char* pomnilnik2; int i; skupniPomnilnik = shmget(1059816, 1*sizeof(int), IPC_CREAT | IPC_EXCL | 0600); if(skupniPomnilnik < 0) { perror("Napaka. Pomnilnik ni ustvarjen."); return(errno); } skupniPomnilnik2 = shmget(1059817, 20*sizeof(char), IPC_CREAT | IPC_EXCL | 0600); if(skupniPomnilnik2 < 0) { perror("Napaka. Pomnilnik 2 ni ustvarjen."); return(errno); } pomnilnik = (int*)shmat(skupniPomnilnik, (void*)0, 0); if(pomnilnik == (int*)-1) { perror("Ni kazalca!"); return -1; } pomnilnik2 = (char*)shmat(skupniPomnilnik2, (void*)0, 0); if(pomnilnik2 == (char*)-1) { perror("Ni kazalca!"); return -1; } *pomnilnik = 0; /* Spinlock*/ while(*pomnilnik == 0) { } for(i=0; i<20; i++) { printf("%c\n",pomnilnik2[i]); } shmdt(pomnilnik); shmdt(pomnilnik2); int brisi1; int brisi2; brisi1 = shmctl(skupniPomnilnik, IPC_RMID, 0); brisi2 = shmctl(skupniPomnilnik2, IPC_RMID, 0); if(brisi1 == 0) { printf("Izbrisano!"); } if(brisi2 == 0) { printf("Izbrisano!"); } return 0; } Code (markup): shm1b: #include <stdio.h>#include <stdlib.h> #include <sys/shm.h> #include <sys/sem.h> #include <errno.h> #include <sched.h> #include <string.h> #include <unistd.h> int main() { int skupniPomnilnik; int skupniPomnilnik2; int* pomnilnik; char* pomnilnik2; int i; skupniPomnilnik = shmget(1059816, 0, 0); if(skupniPomnilnik < 0) { perror("Napaka!"); return(errno); } skupniPomnilnik2 = shmget(1059817, 0, 0); if(skupniPomnilnik2 < 0) { perror("Napaka!"); return(errno); } pomnilnik = (int*)shmat(skupniPomnilnik, (void*)0, 0); if(pomnilnik == (int*)-1) { perror("Ni kazalca!"); return -1; } pomnilnik2 = (char*)shmat(skupniPomnilnik2, (void*)0, 0); if(pomnilnik2 == (void*)-1) { perror("Ni kazalca!"); return -1; } for(i=0; i<20; i++) { pomnilnik2[i]='*'; } /* Stop spinlock */ *pomnilnik = 1; shmdt(pomnilnik); shmdt(pomnilnik2); int brisi1; int brisi2; brisi1 = shmctl(skupniPomnilnik, IPC_RMID, 0); brisi2 = shmctl(skupniPomnilnik2, IPC_RMID, 0); if(brisi1 == 0) { printf("Izbrisano!\n"); } if(brisi2 == 0) { printf("Izbrisano!\n"); } return 0; } Code (markup):