sem_open - Problem mit Semaphoren

Dieses Thema im Forum "C/C++" wurde erstellt von Peregrine, 13.01.2010.

  1. #1 Peregrine, 13.01.2010
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Hallo liebe Community,

    neuerdings habe ich nach einiger Zeit Hochsprache wieder mehr mit C zu tun. Hierzu gleich eine Frage. Folgender Code ist unter dem Betriebssystem VXWorks entstanden (Echtzeit OS auf Unixbasis). Eine Portierung sollte kein Problem darstellen, da nur Posix- und OpenSource-Bordmittel verwendet werden; hier hat sich aber unter Mac (GCC 4.2) ein Problem angemeldet.

    Und zwar wird beim Aufruf sem_t * sem_open(const char *name, int oflag, ...); (konkret bei der Semaphore carpark) der Wert EACCES ausgegeben. Ändert man die Berechtigungsparameter im Aufruf beispielsweise auf 07777 ab, entfällt der Fehler, der sem_wait() Aufruf wird aber vollkommen ignoriert und die Semaphore wird übergangen, als stünde sie nicht im Code. Es gibt aber weder Übersetzungs- noch Laufzeitfehler.
    Hat jemand ein ähnliches Problem schon einmal gehabt oder steh' ich hier einfach nur auf dem Schlauch?!
    Jede Art von Hilfe ist sehr (!) willkommen.

    Viele Grüße,
    Marcus

    P.S. Habt ihr vielleicht eine Möglichkeit/ Tip für mich, wie ich mit Semaphoren beim Debuggen umgehen könnte? Sprich wir stelle ich fest, dass die Werte auch wie gewünscht inkrementiert und dekrementiert werden?!

    Code:
    #include <pthread.h>
    #include <stdio.h>
    #include <semaphore.h>
    #include <time.h>
    #include <errno.h>
    
    #define waitForCarEntrance()	{sem_wait(carpark_entrance);}
    #define waitForCarExit()	{sem_wait(carpark_exit);}
    #define enter_carpark()	{sem_post(carpark_entrance); sem_wait(carpark_entrance_gate);}
    #define leave_carpark()	{sem_post(carpark_exit); sem_wait(carpark_exit_gate);}
    #define openBarrierEntrance() sem_post(carpark_entrance_gate)
    #define openBarrierExit() sem_post(carpark_exit_gate)
    
    #define zeigBesetzt()	printf("DISPLAY:		Besetzt\n")
    #define zeigFrei()	printf("DISPLAY:		Frei\n")
    #define zeig(pl)	printf("DISPLAY:	%4d Frei\n", pl)
    
    void *car_process(void*);
    void *entrance_gate(void*);
    void *exit_gate(void*);
    void *display(void*);
    
    /*****************************************************************************************************/
    /*****************************************************************************************************/
    /*****************************************************************************************************/
    /*****************************************************************************************************/
    
    
    #define	SLEEP_TIME		5	/* maximum amount of time */
    #define NUM_CARS	30 	/* number of cars */
    #define CAPACITY	20	/* number of parking lots in car park */
    
    pthread_t car_thread[NUM_CARS];		/* threads for all cars */
    pthread_t entrance_thread;		/* threads for entrance bar */
    pthread_t exit_thread;		/* threads for exit bar */
    pthread_t display_thread;		/* threads for exit bar */
    
    sem_t *carpark_entrance;
    sem_t *carpark_entrance_gate;
    sem_t *carpark_exit;
    sem_t *carpark_exit_gate;
    
    
    /** Aufgabe: **/
    
    sem_t *carpark;
    
    /** ENDE Aufgabe: **/
    
    int id[NUM_CARS];				/* id parameter */
    
    
    int main()
    {
    	int i;
    	
    	/************************************************/
    	/* create semaphors								*/
    	/************************************************/
    	
    	carpark_entrance_gate = sem_open("entrance-gate", O_CREAT, 666, 0);
    	carpark_exit_gate = sem_open("exit-gate", O_CREAT, 666, 0);
    	carpark_entrance = sem_open("entrance", O_CREAT, 666, 0);
    	carpark_exit = sem_open("exit", O_CREAT, 666, 0);
    	
    	/** Aufgabe: create carpark seamphore here */
    	
    	carpark = sem_open("carpark", 666, CAPACITY);
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

sem_open - Problem mit Semaphoren

Die Seite wird geladen...

sem_open - Problem mit Semaphoren - Ähnliche Themen

  1. Virtualboxproblem

    Virtualboxproblem: Hallo Folgnedes Problem: Ich kann ohne Probleme In Debian-Sid, 64Bit und virtualbox-dkms Unixoide installieren, wenn es sich um eine...
  2. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  3. Problem bei apt-get upgrade (Kali 2.0)

    Problem bei apt-get upgrade (Kali 2.0): Hi, seit paar Tagen habe ich einige Probs. Dachte es sei mal an der Zeit für ein Update und nun tauchen da einige Fehler auf: Es müssen noch 0 B...
  4. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  5. Problem mit Win-Zugriff auf SAMBA

    Problem mit Win-Zugriff auf SAMBA: Hallo rundherum, vielleicht hat jemand eine Idee... Habe jetzt schon 1 1/2 Tage damit verbraten und den Fehler nicht gefunden. Problem:...