thread vs. process zählervariable



  • Hallo

    Ich habe hier folgenden Code:

    struct Toilet* new_Toilet(struct Cloakroom* cloakroom, unsigned int counter)
    {
      struct Toilet* this = malloc(sizeof(struct Toilet));
      printf("Created Toilet %u\n", counter);
      this->cloakroom_ = cloakroom;
      this->number_ = counter;
      this->usage_counter_ = 0;
      this->max_usage_counter_ = 5;
      this->locked_by_ = 0;
    
      return this;
    }
    

    sowie in der gleichen Datei unteranderm:

    int Toilet_isDirty(struct Toilet* this, struct Process* process)
    {
      assert(this->locked_by_ == process);
    
      if (this->usage_counter_ >= this->max_usage_counter_)
        return 1;
      return 0;
    }
    

    So nun zu meinem Problem:

    Arbeite ich mit Theards statt Prozessen funktioniert alles super. Die isDirty wird von einer anderen C Datei aufgerufen und die gewünschten Prameter werden übergeben. Alles wird korrekt mitgezählt und ausgeführt. In dieser Funktion wird usage_counter hochgezählt:

    void Toilet_use(struct Toilet* this, struct Customer* customer)
    {
      assert(this->locked_by_ == customer);
      printf("%s uses toilet %u.\n", customer->name_, this->number_);
      usleep(100*1000);
    
      ++this->usage_counter_;
    
    }
    

    Auch bei den Prozessen wird alles aufgerufen usw.. Nur habe ich jetzt das Problem, dass die usage_counter nicht korrekt erhöht wird. In der isDirty ist der Wert der Variable immer 0. Was mache ich da flasch?

    lg



  • Wie genau "arbeitest" du mit "Prozessen"!?



  • Die Process schaut so aus:

    void Process_start(void (*function)(void*), void* this)
    {
      int pid = fork();
    
      if(pid != 0)
      {
        function(this); 
      }
    }
    

    🙂


Anmelden zum Antworten