sem_open - Problem mit Semaphoren

Diskutiere sem_open - Problem mit Semaphoren im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo liebe Community, neuerdings habe ich nach einiger Zeit Hochsprache wieder mehr mit C zu tun. Hierzu gleich eine Frage. Folgender Code ist...

  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 diesen Ratgeber 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. Bootproblem

    Bootproblem: Hallo Ein PC (i686 mit Debian unstable, nox) hat Bootprobleme (will heißen ist erfolgt keine Grafikausgabe. was ich bisher gemacht habe: HDD an...
  2. Crontab und Scripts - Problem

    Crontab und Scripts - Problem: Hallo Zusammen Ich habe ein Script welches mittels Cronjob ausgeführt werden soll. Gemäss Log wird es auch ausgeführt, jedoch passiert nichts:...
  3. Problem bei der installation einer Sun Netzwerkkarte

    Problem bei der installation einer Sun Netzwerkkarte: Guten Morgen zusammen, beim installieren einer zusätzlichen Netzwerkkarte habe ich ein Problem. Die Karte wird nicht automatisch installiert. Es...
  4. Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe

    Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe: Liebe Community, zurzeit arbeite ich an eine Active Directory Domäne die mittels Samba läuft. Dazu habe ich einen AD DC auf Debian 8.7 mit Samba...
  5. Netzwerkproblem ? , wo ud wie suchen

    Netzwerkproblem ? , wo ud wie suchen: Hallo Folgende Problem: Testserver ist i686 Debian-unstable , auf dem läuft primär der apt-proxy apt-cahcer ng. Zugriff im Moment nur per ssh....