【问题标题】:How to call a function using pthread in c?如何在c中使用pthread调用函数?
【发布时间】:2015-06-24 22:38:40
【问题描述】:

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

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

如何在 C 中做到这一点?

【问题讨论】:

标签: c pthreads


【解决方案1】:

您应该首先创建一个接受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;
}

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

如果您有更多问题,请提出。

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

【讨论】:

  • 她的问题似乎是专门关于如何传递参数的,所以你可能想明确地阐述这一点。
  • 如何从 thread_func() 调用另一个线程特定的函数?
  • 我不明白你想做什么从同一个函数开始的另一个线程或......
  • thread_func() 只是一个普通的 C 函数,您可以从那里调用其他函数,就像调用其他函数一样。例如,上面的示例调用 printf() 的方式相同。
  • @anakin :你没有释放线程堆栈。这意味着每次使用 glibc 生成线程时,都会泄漏 8Mb 的内存。
【解决方案2】:

从技术上讲,你不能……至少不能直接。

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

如果您需要将数据传递给不同的线程进行处理,那么有两种方法可以做到这一点:

1) 只需使用数据作为参数创建一个新线程。

2) 使用工作队列安排。

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

以下是一些关于如何设置的示例:

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

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2015-11-25
    • 2020-07-23
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多