Markus Rechberger / C / Semaphoren
 
StartSeite | MarkusRechberger/ C/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (Autor, Normalansicht)

Hinzugefügt: 66a67,82


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:

revenger@marelaptop:/devel/c/semaphoren$ ./main 
Anlegen der Semaphore
Vor dem kritischen Code
down semid: 327687
Im kritischen 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 --

#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:
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.


StartSeite | MarkusRechberger/ C/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 5. März 2005 21:52 (diff))
Suchbegriff: gesucht wird
im Titel
im Text