0

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

 pthread_mutext_t mutex;
 pthread_t autosavethread;

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

4

1 回答 1

1

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

谷歌搜索您需要调用 pthread API 的确切内容以及可以传达的内容非常重要。

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

于 2014-06-05T06:10:32.257 回答