Beschreibe hier die neue Seite. |
==== Semaphoren ==== Beispiel: [[Code] revenger@marelaptop:/devel/c/semaphoren$ ./main Anlegen der Semaphore Vor dem kritischen Code down semid: 327687 Im kritischen Code ] [[Code] revenger@marelaptop:/devel/c/semaphoren$ ./main Vor dem kritischen Code down semid: 327687 -- schläft hier bis die erste Anwendung den kritischen Code ausgeführt hat -- ] [[Code] #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #define SEMKEY 1234L #define PERMS 0666 struct sembuf op_down[1] = {0,-1,0}; struct sembuf op_up[1] = {0,1,0}; int semid =-1; int res; void init_sem(){ semid=semget(SEMKEY,0,{IPC CREAT}?| PERMS); if(semid<0){ printf("Anlegen der Semaphore\n"); semid = semget(SEMKEY,1,{IPC CREAT}?|PERMS); if(semid<0){ printf("Anlegen der Sempaphore gescheitert!\n"); exit(-1); } res=semctl(semid,0,SETVAL,1); } } void down(){ printf("down semid: %d\n",semid); res=semop(semid,&op_down[0],1); } void up(){ res=semop(semid,&op_up[0],1); } int main(){ init_sem(); printf("Vor dem kritischen Code\n"); down(); printf("Im kritischen Code\n"); sleep(10); up(); return(0); } ] Stürzt ein Programm ab welches eine Semaphore geändert hat werden die Änderungen vom Kernel rückgängig gemacht damit keine Deadlocks eintreten können. Admintools: [[Code] ipcs bsp.: Semaphore Arrays key semid owner perms nsems 0x000004d2 327687 revenger 666 1 ipcrm -s 327687 # entfernt die Semaphore ] Der Semaphorenkey ist eine Magische Zahl und muss nicht unbedingt eindeutig sein, man kann diesen Key auch generieren. |
Semaphoren | ![]() |
Beispiel:
![]() |
|
![]() |
|
![]() |
|
Stürzt ein Programm ab welches eine Semaphore geändert hat werden die Änderungen vom Kernel rückgängig gemacht damit keine Deadlocks eintreten können.
Admintools:
![]() |
|
Der Semaphorenkey ist eine Magische Zahl und muss nicht unbedingt eindeutig sein, man kann diesen Key auch generieren.