Ich habe zwei Threads , thread2
mit Routinen func1
, func2
jeweils. Auf der Basis einer Variablen cnt
möchte ich nun die Ausführungsreihenfolge dieser beiden Threads ändern. Das heißt, wenn cnt
wird selbst dann ausführen func1
dann func2
else if cnt
ungerade wird dann ausführen func2
dann func1
.I haben, es zu tun, wenn cnt
von 1 bis 100.Wie ändert man die Ausführungsreihenfolge von zwei Threads auf der Basis von ungeraden oder geraden Zahlen in C?
Ich habe durch die Verwendung von Semaphoren erreichen nur . Ich habe versucht, es mit dem folgenden Code zu lösen. Aber der Code ist nicht gut genug.
#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>
int cnt=1;
sem_t e_lock,o_lock;
void* func1()
{
while(cnt<=100)
{
if(cnt%2==0) //if even exec then p1
{
printf("value of count: %d\n",cnt);
sem_wait(&e_lock);
printf("even execution, process 1 first\n");
}else
{
sem_post(&o_lock);
printf("odd execution, process 1 second\n");
cnt++;
}
}
}
void* func2()
{
while(cnt<=100)
{
if(cnt%2!=0) //if odd exec then p1
{
printf("value of count: %d\n",cnt);
sem_wait(&o_lock);
printf("odd execution, process 2 first\n");
}else
{
sem_post(&e_lock);
printf("even execution, process 2 second\n");
cnt++;
}
}
}
void main()
{
pthread_t thread1,thread2;
pthread_create(&thread1,NULL,func1,NULL);
pthread_create(&thread2,NULL,func2,NULL);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
}
Bitte erläutern Sie die Änderungen.
Ich denke, du überdenkst es und lässt 'main()' nicht seinen Teil dazu beitragen. Zumindest würde ich jeden Thread blockieren und 'main()' die Signalisierung durchführen lassen. – unwind
Es gibt keinen Grund, Threads auf diese Weise zu verwenden. Wenn Sie Dinge nacheinander tun müssen, verwenden Sie keine Threads. –
Es ist richtig, dass ich keine Threads verwenden muss, wenn eine sequenzielle Ausführung benötigt wird. Aber das ist die Herausforderung. – Midhun