#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_even(void* arg);
void* thread_odd(void* arg);
int main(int argc, char** argv) {
pthread_t tid[2];
pthread_create(&tid[0], 0, &thread_even, 0);
pthread_create(&tid[1], 0, &thread_odd, 0);
pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);
return 0;
}
void* thread_even(void* arg) {
int* thread_id = (int*)arg;
pthread_mutex_lock(&mutex);
for(int i = 1; i <= *thread_id; i++)
{
if(i%2 != 0)
{
printf("Thread 1: %d", i);
}
}
pthread_mutex_unlock(&mutex);
return NULL;
}
void* thread_odd(void* arg) {
int* thread_id = (int*)arg;
pthread_mutex_lock(&mutex);
for(int i = 1; i <= *thread_id; i++)
{
if(i%2 == 0)
{
printf("Thread 2: %d", i);
}
}
pthread_mutex_unlock(&mutex);
return NULL;
}
Die oben ist der Code arbeite ich an, aber ich ein Segment Fehlerfehler bekommen ... Was ich will, erreichen, ist zum BeispielAusdrucke von geraden und ungeraden Zahlen Fäden in C
wenn 1
Gewinde 2:: I kompilieren und laufen mit einem Argument 8 (./number 8)
sollte es
Gewinde 1 auszudrucken 2
Faden 1: 3
... usw., bis die Nummer 8.
in dem Thread 1s stehen die geraden Zahlen und das Gewinde 2s für die ungeraden Zahlen darstellen sollte.
Bitte helfen ... Ich möchte mein Wissen über C zu entwickeln, aber habe niemanden zu fragen. Danke.
'int * thread_id = (int *) arg;' - ähm ... Sie haben 'NULL' als Argument für' pthread_create' übergeben, was 'arg' hier ist. Es überrascht nicht, 'i <= * thread_id' dereferences 'NULL' und ruft somit * undefined behaviour * auf. – WhozCraig
Was soll ich dann als Argument übergeben, um das Programm erfolgreich zu machen? Vielen Dank! – seung
@seung, siehe meine Antwort. Auch die Verriegelung, die Sie getan haben, ist wahrscheinlich grober, als Sie suchen. Wie Sie es jetzt haben, wird effektiv ein Thread abgeschlossen, und dann wird der andere ausgeführt. –