如何在c中使用pthread调用函数?

时间:2015-04-17 21:53:17

标签: c pthreads

如何使用pthreads在单独的线程中调用函数?

在Java中,答案如下所示:How to call a method with a separate thread in Java?

我如何在C中执行此操作?

2 个答案:

答案 0 :(得分:2)

您应首先创建一个接受void*作为参数的函数,并返回void*。然后创建一个变量来保存线程。在初始化之后,等待完成工作。

这是一个简单的代码。

#include<stdio.h>
#include<pthread.h>

void* thread_func(void* argument) {
  printf("My first thread!!!\n");
  printf("Passes argument: %d\n", *(int*)argument);
  pthread_exit(NULL); // you could also return NULL here to exit no difference
}

int main() {
  pthread_t my_thread;
  int a = 10;
  pthread_create(&my_thread, NULL, thread_func, &a); // no parentheses here 
  pthread_join(my_thread, NULL);

  return 0;
}

小心传递指针,因为它可能会导致很多问题。

如果您有更多问题,请询问。

P.S。 我找到了这个多线程教程。在c代码中唯一不能编译的是输出,因为教程是用c ++编写的,并使用iostream库来输出.ALL线程创建,传递参数等等在c代码中完全有效。 http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm

答案 1 :(得分:1)

从技术上讲,你不能......至少不是直接的。

线程是处理器在运行程序时遵循的执行路径。在今天的环境中,有许多线程的实例。最终用户应用软件通常有不同的线程做不同的事情。但是,在服务器上,不同的线程正在执行与服务客户端请求相同的操作。在任何情况下,每个单独的线程都以其自己的堆栈帧和处理器状态运行。

如果您需要将数据传递给另一个要处理的线程,那么有两种方法可以做到:

1)只需创建一个以数据为参数的新线程。

2)使用工作队列安排。

我会使用#2,因为根据队列的设置方式,你可以运行多个生产者和消费者。

以下是有关如何进行此设置的几个示例:

https://code.google.com/p/c-pthread-queue/source/browse/trunk/queue.c

http://williams.comp.ncat.edu/comp450/pthreadPC.c

这是一个关于pthreads的非常好的教程: https://computing.llnl.gov/tutorials/pthreads/

希望这有帮助。