pthread Frage



  • int rc;
    long t;
    
    for(t=0; t<NUM_THREADS; t++) 
    {
       printf("Creating thread %ld\n", t);
       rc = pthread_create(&threads[t], NULL, PrintHello, (void *) &t);
       ...
    }
    

    Das ist laut https://computing.llnl.gov/tutorials/pthreads/ inkorrektor Code, da sich die Adresse von sich ändern kann und die Threads nicht schnell genug Zugriff darauf haben könnten.

    Ich habe nun dieses Code-Stück

    pthread_t* threads = malloc(dim * sizeof(pthread_t));
            arg_t* args = malloc(dim* sizeof(arg_t ));
            for(int i=0; i<dim;i++)
            {
                args[i].dim = dim;
                args[i].col = i;
                args[i].a = a;
                args[i].b = b;
                args[i].c = c;
    
                int rc = pthread_create(&threads[i], NULL, shm_mm, &args[i]);
            }
            for(int i=0;i<dim;i++)
            {
                pthread_join(threads[i],NULL);
            }
    

    Kann es sein, dass dieser Code auch fehlerhaft sein kann? Da ich &args[i] verwende, dürfte ich ja den Wert von i verwenden und das ganze Problem irrelevant sein, oder?



  • inkorrektor Code, da sich die Adresse von sich ändern kann

    a) Nein, es ist nicht inkorrekter Code. Steht da auch nicht. b) Die Adresse aendert sich nicht, sonder der Wert.

    Kann es sein, dass dieser Code auch fehlerhaft sein kann? Da ich &args[i] verwende, dürfte ich ja den Wert von i verwenden und das ganze Problem irrelevant sein, oder?

    Kommt drauf an, was du mit &args[i] machst.



  • Ups, mal wieder nicht genau gelesen ^^

    Aber dennoch:

    Auch das i von args[i] ändert sich, kann der Thread dennoch mit dem richtigen i erzegut werden?



  • Ja, er wird mit dem richtigen i erzeugt.


Anmelden zum Antworten