Überprüfungsthread einrichten



  • ich habe folgenden code:

    #include <pthread.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <stdio.h>

    char twelveDigits[12];
    int g=0;
    int z=0;
    pthread_t t1,t2;

    void ausgabe(){
    int x=0;
    while(x<12){

    printf("%c",twelveDigits[x]);
    x++;
    }
    printf("\n");

    }

    void *thread2(void *arg){

    if(z>g){
    printf("\n!!!! FEHLER !!!!\n");
    }

    g=0;
    z=0;

    return NULL;
    }

    void *thread(void *arg){
    int x =11;
    int i=0;

    while(i<10){
    for(int r=0; r<12; r++){
    z+=twelveDigits[r];
    }

    ausgabe();
    twelveDigits[x]=twelveDigits[x];

    twelveDigits[x]=twelveDigits[x]+1;
    i++;
    if( twelveDigits[x]==58){twelveDigits[x]='0';
    twelveDigits[x-1]=twelveDigits[x-1]+1;}
    if(twelveDigits[x-1]==58){twelveDigits[x-1]='0';
    twelveDigits[x-2]=twelveDigits[x-2]+1;}

    if(twelveDigits[x-2]==58){twelveDigits[x-2]='0';
    twelveDigits[x-3]=twelveDigits[x-3]+1;
    if(twelveDigits[x-3]==58){twelveDigits[x-3]='0';
    twelveDigits[x-4]=twelveDigits[x-4]+1;
    if(twelveDigits[x-4]==58){twelveDigits[x-4]='0';
    twelveDigits[x-5]=twelveDigits[x-5]+1;
    if(twelveDigits[x-5]==58){twelveDigits[x-5]='0';
    twelveDigits[x-6]=twelveDigits[x-6]+1;
    if(twelveDigits[x-6]==58){twelveDigits[x-6]='0';
    twelveDigits[x-7]=twelveDigits[x-7]+1;
    if(twelveDigits[x-7]==58){twelveDigits[x-7]='0';
    twelveDigits[x-8]=twelveDigits[x-8]+1;
    if(twelveDigits[x-9]==58){twelveDigits[x-9]='0';
    twelveDigits[x-10]=twelveDigits[x-10]+1;
    if(twelveDigits[x-10]== 58){twelveDigits[x-10]='0';
    twelveDigits[x-11]=twelveDigits[x-11]+1;
    if(twelveDigits[x-11]==58){twelveDigits[x-11]='0';
    printf("Überlauf"); system("exit");
    }}}}}}}
    }
    }
    for(int y=0; y<12; y++){
    g+=twelveDigits[y];
    }
    pthread_create(&t2, NULL, *thread2, NULL);
    }

    i=0;

    twelveDigits[x]='0';
    return NULL;
    }

    int main(void) {

    for(int i=0; i<12; i++){
    twelveDigits[i]='0';

    }

    while(0<1){
    int i=0;

    pthread_create(&t1, NULL, *thread, NULL);

    pthread_join(t1,NULL);
    pthread_join(t2,NULL);

    }

    return 0;
    }

    Ich möchte das thread2 also t2 t1 kontrolliert. Der Code errichtet einen Zähler mit einen char Feld, wie ein Kilometerzähler. jedes mal wen hochgezählt wird soll t2 kontrollieren ob die zahl wirklich höher ist als die vorherige.

    Ich bekomme das nicht hin irgendwie kommt mir das noch sehr merkwürdig
    vor.

    Hier die Aufgabenbeschreibung des profs.

    2.1 Konkurrierende Zugriffe
    Nehmen Sie den Quelltext aus der letzten U ̈bung (thread2.c) als Vorlage und a ̈ndern Sie diesen wieimFolgendenbeschrieben.DasProgrammhateineglobalescharacterarraychar twelveDigits[12] , welches 12 ASCII-Zeichen aufnimmt1. Fu ̈llen Sie dieses Feld mit ’0’, also dem Integer-Wert 48.
    1Der Einfachheit halber ko ̈nnen Sie auch 13 Character nehmen, um Platz fu ̈r eine terminierende Null zu haben, so dass Sie den String mit printf() ausgeben ko ̈nnen
    1
    Implementieren Sie einen Thread, welcher in einer Endlosschleife dieses Feld als Zahl interpretiert und jeweils um eins erho ̈ht. D. h. die ASCII-Zahl soll Stellenweise von 0 bis 9 hochgeza ̈hlt werden, ohne in einen Integer umgewandelt zu werden. Bei einem U ̈berlauf einer Ziffer soll die daneben liegende Ziffer erho ̈ht werden (stellen Sie sich einen schnell laufenden Kilometerza ̈hler vor).
    2.1.1
    1. 2.
    Aufgabe: Wechselseitiger Ausschluss
    Scha ̈tzen Sie ab, wie lang es dauern wu ̈rde, bis twelveDigits u ̈berla ̈uft.
    Erstellen Sie einen zweiten Thread, der u ̈berpru ̈ft, dass die Zeichenfolgen in twelveDigits tatsa ̈chlich monoton ansteigen. Es soll also eine Meldung ausgegeben werden, falls ein klei- nerer Wert als zuvor beobachtet wird.
    Experimentieren Sie mit unterschiedlichen sleep-Zeiten (auch Null bzw. auskommentiert) und fu ̈gen Sie Leerschleifen zur Verzo ̈gerung ein. Achten Sie darauf, dass der Compiler keine Optimie- rungen durchfu ̈hrt und verwenden Sie ggf. volatile. Starten Sie Thread 1 und 2 mehrfach.
    Sorgen Sie in obigem Programm fu ̈r wechselseitigen Ausschluss mit Mutexen aus der pthreads- Bibliothek(sieheauchPOSIXThreadsProgramming2)oderFreeBSD-Semaphoren(sieheman sema).



  • Und was hat das mit Standard C zu tun?
    Hausaufgaben machen wir hier nicht.
    Du kannst deinen Code ja noch nicht mal leserlich posten.


Log in to reply