Я хотел создать программу, которая записывает нечетные и четные числа от 1 до 100 с двумя функциями, первая функция печатает первые 5 нечетных чисел, вторая функция печатает первые 5 четных чисел, и снова мы возврат к первой функции для печати вторых 5 нечетных чисел и т. д. В этой программе я хотел чередовать только потоки 2
, но я не могу найти решение. Вот мой код, в этом коде я создал 40
threads. Кто-нибудь знает, как чередовать 2 потока и найти тот же результат.Альтернатива между двумя потоками
#include<stdio.h>
#include<pthread.h>
pthread_t tid[40];
int pair=2;
int impair=1 ;
pthread_mutex_t lock;
void* genpair(void *arg)
{
pthread_mutex_lock(&lock);
int i = 0;
for (i=0 ; i<5 ; i++,pair+=2)
{
printf("%d ",pair) ;
}
printf(" ");
pthread_mutex_unlock(&lock);
return NULL;
}
void* genimpair(void *arg)
{
pthread_mutex_lock(&lock);
int i = 0;
for (i=0 ; i<5 ; i++,impair+=2)
{
printf("%d ",impair) ;
}
printf(" ");
pthread_mutex_unlock(&lock);
return NULL;
}
int main(void)
{
int i = 0;
int j=0 ;
int err;
if (pthread_mutex_init(&lock, NULL) != 0)
{
printf("\n mutex init failed\n");
return 1;
}
for(j=0 ; j<20 ; j+=2)
{
pthread_create(&(tid[j]), NULL, &genpair, NULL);
pthread_create(&(tid[j+1]), NULL, &genimpair, NULL);
pthread_join(tid[j], NULL);
pthread_join(tid[j+1], NULL);
}
pthread_mutex_destroy(&lock);
return 0;
}
Пожалуйста, описать текущее поведение вашей программы. Но для начала поставьте 'printf (" \ n ")' перед 'pthread_mutex_unlock', чтобы очистить буферизованный вывод, чтобы он появился на stdout. – kaylum
Нет смысла использовать потоки для вашей задачи. – nwp
@nwp Существует, если это учебное упражнение. Или если это MCVE, полученный из более крупной программы. – kaylum