【发布时间】:2015-04-05 07:37:50
【问题描述】:
我是多线程编程的新手。我尝试使用并行运行的偶数和奇数打印线程打印数字序列。执行时,代码进入死锁。谁能帮我解决这个问题。
#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);
}
}
【问题讨论】:
-
“我尝试按顺序打印数字”这不是违背了使用多线程的目的吗?
-
@user2864740 ,哦,是的.... 与 C++ 不同,
void*的转换会在 C 中自动进行,对吧? -
@CoolGuy 是的。这是其中之一..差异。 (请参阅 stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)
-
@juanchopanza 抱歉,应该是“尝试打印数字序列”
标签: c multithreading