多线程程序中的核心转储

时间:2009-11-10 06:00:57

标签: c multithreading unix pthreads coredump

我正在尝试编写一个简单的多线程程序。它倾销了核心。我有一个在下面创建一个线程时调用的函数:

void *BusyWork(void *t)
{
   int i;
   int *tid;
   int result=0;
   tid = t;

   printf("Thread %d starting...\n",*tid);
   for (i=0; i<10; i++)
   {
       result = result + (i* i);
   }
   printf("thread %d is sleeping for %d sec's\n",tid,tid);
   sleep(tid);
   printf("Thread %d done. Result = %e\n",tid, result);
   pthread_exit((void*) t);
}

我对pthread_create函数的调用位于main函数内部:

int t;

for(t=0; t<NUM_THREADS; t++) 
{
      printf("Main: creating thread %d\n", t);
      rc = pthread_create(&thread[t], &attr, BusyWork, (void *)t);
}

请帮我找出问题所在? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

这一行错了:

printf("Thread %d starting...\n",*tid);

您可以通过以下方式实现目标:

printf("Thread %d starting...\n",(int) t);

或     printf(“Thread%d starting ... \ n”,tid);

答案 1 :(得分:0)

从这一行开始:

printf("thread %d is sleeping...

tid的所有引用都应为*tid