主线程和插件中的线程

pthread in main and plugin?

本文关键字:线程 插件      更新时间:2023-10-16

我运行在 Ubuntu 14.04 上,编译并使用 gcc/g++ 进行链接。main 由大约 30 个文件组成,main 调用 20 个插件。我使用-pthread作为编译器选项,我确实#include <pthread.h>.我的问题是:

  1. 仅将 #include 放在 main 中就足够了,还是我必须将其放在属于 main 的所有文件中?我想答案也适用于插件。
  2. 我是否必须将所有插件 mains 放入 #include 并使用 -pthread 进行编译,即使它们不使用线程还是插件的调用已经是线程?
我将在这里冒昧地假设,

当您说"插件"时,您实际上是指"外部函数",即在给定的 C 源文件中使用但未定义的函数。

从代码调用任何外部函数时,至少需要声明该函数,以便编译器知道调用它的正确方法。 头文件通常包含那些需要的声明。

例如,如果要使用 strcpy 函数,则需要#include <string.h> ,因为该文件包含 strcpy 的声明。 如果在给定的 C 文件中的任何地方都没有调用 strcpy(也没有在 string.h 中声明任何其他函数),则无需在该文件中#include <string.h>

同样,对于 pthread.h ,仅当您从该 C 源文件中调用 pthread_create 或该文件中声明的任何其他函数时,才需要包含它。

链接方面,如果链接在一起以创建可执行文件的任何源文件使用任何 pthread 函数,则需要在创建可执行文件时传递-pthread

这个问题有点模糊,30 个文件的"主要"看起来像"exe",即可执行程序和插件是共享的 lib 或 dll。似乎还想使您的项目多线程。如果它已经是一个多线程程序,那么使用 gdb(如果你在 linux 上)连接到它并使用"信息线程",它将列出线程或"cat/proc/[pid]/status |grep 线程",它将显示线程数。其中 pid 是正在运行的程序的进程 ID。

如果 -pthread 用作编译器选项,但如果它没有与 pthread lib 链接,即在你构建/制作程序中的某个地方应该有 -lpthread;那么你的程序不是多线程的,即使你包含头文件,因为没有使用线程 API。