如何使用pthreads在单独的线程中调用函数?
在Java中,答案如下所示:How to call a method with a separate thread in Java?
我如何在C中执行此操作?
答案 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/
希望这有帮助。