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 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. 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....
  2. Verständnisproblem Samba / LDAP

    Verständnisproblem Samba / LDAP: Hallo zusammen! Ich habe unter Ubuntu 16.04 einen LDAP und Samba Server aufgesetzt. Diese scheinen auch ordnungsgemäß zu funktionieren, sodaß ich...
  3. nginx+php-fpm problem

    nginx+php-fpm problem: Moin, ich hab hier gerade ein Problem und keine Idee mehr woran es liegt. Ich muss wie schon in der Überschrift erwähnt nginx dazu bringen php...
  4. Problem mit Windows auf Ordner auf dem Linuxsystem zuzugreifen

    Problem mit Windows auf Ordner auf dem Linuxsystem zuzugreifen: Ich mache gerade meine ersten Schritte mit Linux und würde gerne auf Dateien meines Linuxsystems auch mit Windows zugreifen, ich bin am...
  5. Virtualboxproblem

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