【问题标题】:Pthread Join in C?C中的Pthread_join?
【发布时间】:2014-06-04 23:53:09
【问题描述】:

我正在编写将文本保存到二进制文件的代码,其中包括将文本自动保存到二进制文件的功能,以及从二进制文件打印的功能,我需要合并 pthread 锁和加入。我们得到了

 pthread_mutext_t mutex;
 pthread_t autosavethread;

作为全局变量,虽然讲师没有谈论 pthread 或 mutex 的实际作用,所以我对此感到困惑。 另外,我知道每当更改或读取共享变量时我都需要使用锁(在我的情况下它将是二进制文件)。但是在文件末尾我应该使用 pthread_join,我不知道它的作用或应该在其中使用哪些参数。我猜 mutex 和 autosavethread 应该被关闭,或者类似的东西,但我不知道如何写它。谁能帮助我更好地理解?

【问题讨论】:

  • 在网上查找 pthreads 教程。有许多。这里还有数千个答案,展示了线程的创建和加入以及互斥锁的适当使用。你对你必须做什么的直觉是正确的。如果您的代码有问题,您可以提出具体问题。
  • 如果您使用的是 Linux 机器,您可能希望在终端中使用 man functionName 来获取有关特定功能的信息。

标签: c binary pthreads binaryfiles pthread-join


【解决方案1】:

有两种类型的 pthread - 可连接线程和可分离线程。 如果你想让一个线程只接受一个任务并在任务完成后离开,你需要分离线程; 如果您想在该线程完成分配的作业后与创建的线程进行通信,则必须使用可连接线程。基本上,当父线程及其创建的线程需要在线程完成后进行通信时需要它。

谷歌您需要调用 pthread API 的具体内容以及可以传达的内容非常有用。

但我想在这里提到的一件事是,对于可连接线程,您必须针对创建的线程显式调用 pthread_join。否则会出现严重的内存泄漏。当可加入线程完成其任务时,线程似乎退出(在 linux 上,您可以检查 /proc/PID/task/ 文件夹,一旦线程完成,其下的条目将消失),但为此分配的资源可连接线程,即堆栈,仍然存在于进程内存空间中。随着越来越多的可连接线程创建并完成它们的任务,每个线程的堆栈只留在进程空间中,除非您显式调用 pthread_join。希望对您有所帮助,甚至有点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2021-07-18
    • 2017-04-18
    • 2012-10-30
    • 2019-01-22
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多