使用pthread创建线程失败

时间:2016-10-20 00:48:14

标签: c multithreading gcc

当我运行gcc test.c -o test.o -lpthread -lrt时,我正在使用test.o编译我的代码。我已阅读手册页,我认为我的代码应该成功创建一个新线程。是否有任何理由说创建的线程无法打印到控制台?

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/types.h>

void* thd ();

pthread_t tid;

int main()
{
  int i;

  i = pthread_create(&tid, NULL, &thd, NULL);
}

void* thd ()
{
  printf("hello");
}

3 个答案:

答案 0 :(得分:2)

您的程序创建一个线程然后终止,永远不会让线程有机会完成任何有用的工作。我们没有理由打印任何东西。

答案 1 :(得分:2)

它不会打印因为你将在打印之前结束(没有连接,你不会等待线程结束)

public static double LoanCalculator(double loan, double rate, int payments)
{
    double r = rate/12;
    double monPay = (loan * r * Math.pow(1+r, payments))/((Math.pow(1+r, payments))-1);
    return monPay;
}

答案 2 :(得分:1)

就像David Schwartz所说,主线程需要等待子线程完成。在main()中使用pthread_join来做到这一点,如下所示:

#include <sys/types.h>

void *thd(void *);

pthread_t tid;

int main()
{
  int i;

  i = pthread_create(&tid, NULL, &thd, NULL);
  pthread_join(tid, NULL);
  return 0;
}

void *thd(void *unused)
{
  printf("hello\n");
  return 0;
}