Semaphor



  • Hallo,

    mein Semaphor soll erst 0 Ressourcen und dann 10 haben.
    Die einzige Moeglichkeit die ich sehe ist 2 mal die sem_init Methode mit dem gleichen Semaphor aufzurufen. Gibt es da bedenken ?

    int sem_init(sem_t *sem, int pshared, unsigned int value);
    
    int main()
    {
    
    sem_t mySemaphor:
    
    sem_init(&mySemaphor,0) // hier bekommt das Semaphor erst mal 0 Ressorcen
    
    // Let the threads run :)
    
    sem_init(&mySemaphor,10) // jetzt bekommt das Semaphor 10 Ressourcen
    
    // Let the threads run again :)
    
    }
    


  • Wie dir die Manpage verraten hätte, erzeugt das undefiniertes Verhalten.

    Du kannst den Semaphor aber schließen, neu öffnen und dann neu initialisieren. Wobei mir das Vorhaben ziemlich seltsam vorkommt - du solltest nicht gleichnamige Semaphore für verschiedene Ressourcen benutzen.



  • welche manpage ?

    man sem_init

    gibts das fuer jeden Systemcall ?



  • Ich brauche aber dieses Verhalten. Mein Semaphor soll zuerst 0 Ressorcen haben ( also kein Thread hat Zugriff ) und spaeter wenn die Hardware initialisiert ist sollen 10 Threads Zugriff haben. Wie soll ich es sonst machen ??


Anmelden zum Antworten