Ich möchte die ungeraden Zahlen im Haupt-Thread und die geraden Zahlen im neuen Thread drucken. Ich habe versucht, ein Programm zu schreiben, aber es druckte nur ungerade Zahlen, nicht die geraden Zahlen. Ich habe versucht, nach Hinweisen zu suchen, um herauszufinden, was falsch ist, aber ich habe keine gefunden.Kann gerade und ungerade Zahlen nicht asynchron drucken
Dies ist mein Code.
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#define MAX 1000
int count = 0;
void print_odd_numbers();
void *print_even_numbers();
int main() {
pthread_t t;
int iret;
iret = pthread_create(&t, NULL, print_even_numbers, NULL);
print_odd_numbers();
pthread_join(t, NULL);
return 0;
}
void print_odd_numbers() {
while(count <= MAX) {
if(count % 2 == 1) {
printf("%d\n", count);
}
count++;
}
}
void *print_even_numbers() {
while(count <= MAX) {
if(count % 2 == 0) {
printf("%d\n", count);
}
count++;
}
pthread_exit(NULL);
}
Jeder Thread benötigt seine eigene Variable 'count'. Benutze keine Globals! –
@MartinJames Ich habe viele Programme gesehen, in denen sie die Anzahl global halten. Eigentlich sollten die beiden Threads parallel laufen, also sollte die Anzahl, auf die sie verweisen, gleich sein. Nach meinem Wissen. Bitte helfen Sie, wenn ich falsch liege. –
@Priyanka Naik Nein, das ist falsch. Der Grund hat mit CPU-Cache-Kohärenz zu tun. Sofern Sie keine spezifischen Operationen verwenden, die einen gemeinsamen Wert in einer Cache-kohärenten Weise atomar inkrementieren, können Sie zwei CPUs (oder Kerne) haben, die jeweils über ihre eigene Kopie der Variablen im Cache iterieren und dann ihre Kopie zurückschreiben Irgendwann. Außerdem muss der Compiler den Wert nicht erneut aus dem Speicher lesen, aber das ist eine andere Geschichte. –