多线程程序中的核心转储

标签 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 函数的调用位于主函数内部:

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);
}

请帮我看看问题出在哪里? 提前致谢。

最佳答案

这一行是错误的:

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

您可以通过以下方式实现您想要的:

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

或者 printf("线程 %d 开始...\n", tid);

关于多线程程序中的核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705900/

相关文章:

java - 并行和顺序的事件处理

c - 线程中的私有(private)变量

linux - 更改Linux中的符号链接(symbolic link)

unix - 使用sed,删除字符首次出现之前的所有内容

c - 从文件中读取值

c - 宏如何根据传递给它的类型定义有效的全局名称?

c - 我无法更改 c、Visual Studio 中的当前路径

c - TLB、CPUID 和 Hugepages?

java - 更改线程中的字符串

macos - 如何在命令行上获取 bash 子进程的进程 ID