Я новичок в многопоточном программировании. Я попытался напечатать последовательность чисел с использованием потоков четных и нечетных чисел, работающих параллельно. При выполнении код переходит в тупик. Может ли кто-нибудь помочь мне решить эту проблему.C Нитки для печати последовательности чисел: с четными и нечетными тиражами, выполняемыми параллельно
#include<stdio.h>
#include<pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t even, odd;
void printfun1(void *pnt);
void printfun2(void *pnt);
main()
{
pthread_t pthread1, pthread2;
int ret1, ret2;
char *message = "thread 1";
char *message2 = "thread 2";
ret1 = pthread_create(&pthread1, NULL, printfun1, (void *)message);
if(ret1)
{
printf("thread creation failed");
}
ret2 = pthread_create(&pthread2, NULL, printfun2,(void*) message2);
if(ret2)
{
printf("thread creation failed");
}
pthread_join(pthread1, NULL);
pthread_join(pthread2, NULL);
exit(0);
}
void printfun1(void *ptr)
{
char* message = ptr;
int counter = -1;
while(counter < 50)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&even, &mutex);
counter += 2;
printf("%d \n", counter);
pthread_cond_signal(&odd);
pthread_mutex_unlock(&mutex);
usleep(1000000);
}
}
void printfun2(void *ptr)
{
char* message = ptr;
int counter2 = 0;
pthread_cond_signal(&even);
while(counter2 < 50)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&odd, &mutex);
counter2 += 2;
printf("%d \n", counter2);
pthread_cond_signal(&even);
pthread_mutex_unlock(&mutex);
usleep(1000000);
}
}
«Я пытался печатать номера последовательно» не что поражение цели использования нескольких потоков? – juanchopanza
@ user2864740, Oh yea .... В отличие от C++, преобразование из 'void *' происходит автоматически в C, правильно? –
@CoolGuy Да. Это одна из тех ... отличий. (См. Stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – user2864740