У меня есть три функции A, B, C, которые я хочу использовать для работы с потоками.Я хочу запустить их для определенного количества итераций и хочет переключаться между ними на каждой итерации.У меня проблемы с порядком их выполнения при использовании pthread_yield ()
Ниже приведен код для этих функций
void *A(void *arg){
int i = 0;
for (i=0; i < 3; i++){
printf("Hello A%d\n", i);
pthread_yield();
}
}
void *B(void *arg){
int i = 0;
for(i=0; i < 3; i++){
printf("Hello B%d\n", i);
pthread_yield();
}
}
void *C(void *arg){
int i = 0;
for(i=0; i < 3; i++){
printf("Hello C%d\n", i);
pthread_yield();
}
}
, а вот код для моей основной функции, где я делаю потоки
int main(){
pthread_t threadId_1, threadId_2, threadId_3;
printf("Before Thread\n");
pthread_create(&threadId_1, NULL, A, NULL);
pthread_create(&threadId_2, NULL, B, NULL);
pthread_create(&threadId_3, NULL, C, NULL);
// This line is Equivalent to Sleep // pthread_join(threadId_1, NULL);
//pthread_join(threadId_2, NULL);
//pthread_join(threadId_3, NULL);
sleep(1);
printf("After Thread\n");
}
когда я запускаю программу, я получаю следующий вывод:
Before Thread
Hello C0
Hello B0
Hello C1
Hello B1
Hello C2
Hello B2
Hello A0
Hello A1
Hello A2
After Thread
Вместо этого я хочу
Before Thread
Hello A0
Hello B0
Hello C0
Hello A1
Hello B1
Hello C1
Hello A2
Hello B2
Hello C2
After Thread
Если я не использую pthread_yieldпоток, который я создал последним, закончится первым, а затем последним последним, а поток, созданный первым, закончится последнимпочему это так?
Кроме того, когда я использую pthread_yield, почему программа чередуется между двумя последними созданными потоками B и C, прежде чем завершить выполнение и затем перейти к потоку A?
Как мне добиться желаемого результата, когда нити A, B, C прекрасно чередуются между собой?