问题标签 [pthread-join]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1446 浏览

c - 销毁分离的线程 (POSIX)

我只是想知道,如果我使用属性和"pthread_attr_setdetachstate"带有参数的函数创建一个分离线程(POSIX) PTHREAD_CREATE_DETACHED,我是否必须在程序结束时销毁线程?

我知道我必须销毁为创建分离线程而创建的属性,但对于线程本身,我真的不知道。

0 投票
1 回答
1814 浏览

c++ - pthread_create创建的子线程中如何调用主线程?

我使用 pthread_create 为请求的 http 创建了一个子线程,在我获得数据后我想调用主线程来更新 UI。

这三个函数可以用来做什么?为什么?

有没有热心人能解我的疑惑?非常感谢!

0 投票
1 回答
160 浏览

c - Pthread加入C?

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

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

0 投票
1 回答
2033 浏览

pthreads - 查询 pthread_join()

下面是期望程序陷入死锁的程序,因为 pthread_join() 是线程上的阻塞等待(它正在等待终止)。

但我看到 pthread_join() 不会阻塞并返回失败(35)

你能帮我理解,为什么 pthread_join() 会解除阻塞吗?因为主线程尚未终止,可能这应该是死锁?

这是输出:

0 投票
1 回答
128 浏览

c - 为什么 pthread_join() 从未被调用?

我对 C 中的多线程非常缺乏经验,因此我非常感谢您对这段客户端代码的一些输入(为简单起见,已删除了无关部分)。

对于那些熟悉客户端-服务器编程的人来说,你应该看到除了使用 POSIX 线程之外,客户端代码在处理用户输入和读取和写入服务器方面并没有什么特别之处。我决定使用单独的线程进行读写;否则,客户端将不得不写一些东西,等待服务器回复,然后再写一些东西。

我在 main() 的最后使用 pthread_join() 方法。这些函数应该等到读取 (th_r) 和写入 (th_w) 线程完成并放弃它们使用的资源。我遇到的问题是这些方法显然从未被调用过。

当我启动客户端时,我看到它立即到达“hello1”,但是当客户端或服务器终止通信流时,我看不到“hello2”或“hello3”,这意味着两者都没有到达。

有人可以阐明我所缺少的吗?

0 投票
1 回答
115 浏览

multithreading - 使用 pthread_join() 和 pthread_exit() 的确切需要

之前有人问过这个话题,但我仍然不太清楚 pthread_join() 的用法。

我在某处读到,当线程存在而没有与主线程连接时,资源不会被清理。我们所说的资源是什么?如果这些资源存在于调用线程的堆栈中,当调用线程存在时它们不会被清除吗?所以我认为 pthread_join() 有助于清理堆中存在的资源?还有使用 pthread_exit() 的好处是什么?

0 投票
1 回答
130 浏览

c - 成功 pthread_join 后 main() 不会终止

我有一个程序启动一个 pthread,然后在它返回之前等待这个线程的终止。代码类似于:

该程序按预期打印:join result: 0. 所以连接有效,t完成。尽管如此,程序并没有停止执行。如果我在该行exit(0)之前插入一个命令(或其他数字),我只能强制它停止。return 0

但是,如果我删除pthread_join调用的行,程序将完美退出。

这怎么可能?在所有子线程加入后,什么可以阻止程序完成执行?

编辑:我刚刚发现 gdb 告诉我在执行最后一行后出现分段错误}。尽管如此,我不知道幕后发生了什么:

0 投票
1 回答
600 浏览

multithreading - 如果未加入 pthread_cond_wait 则无法正确唤醒

下面的代码取自关于 pthreads 的 llnl 教程,有两个修改:

  1. 注释sleep(1);in 函数
  2. 注释 pthread_join(thread[i],NULL);in 函数 main

    /li>

在 Mac OS X 10.9(Apple LLVM 版本 5.1 (clang-503.0.40))上,这将输出:

而在 CentOS 5 和 6(gcc 4.1.2 和 gcc 4.4.3 x86_64-redhat-linux)上,输出出现的更随机,有时是:

它挂起,有时它会给出:

并且还挂起。

总结一下:在 Mac OS X 上,如果我不睡觉inc_count并加入 main 中的 3 个线程,watch_count当 count 为 2 时,它将接收信号(显然不是由 2 个 inc_count 线程发出的信号),并且pthread_cond_signal永远不会被调用。

然而,在 Linux 上,它会在某个时候挂起。

我的问题是:如何pthread_join影响条件变量的行为?为什么 Mac OS X 的行为与 Linux 如此不同?

0 投票
1 回答
126 浏览

c++ - 多CPU多线程中的多线程

假设我有一个无向图。

图的一小部分:

现在节点 A 和 B 继续并行修改节点 C。 // 节点 A 和节点 B 在并行线程中处理节点 C。

我希望节点 B 的线程将等待节点 A 的线程完成处理。它必须是这样的。没有其他办法。

我也不希望正在处理其他节点的其他线程等待上述条件,即我不想使用互斥锁。

我创建了一个类成员布尔标志,并希望将其用作条件。// 让那个标志为 d_flag

此处的 MT 使用多个 CPU。

我认为不起作用的解决方案:

CPU1:线程 1

CPU2:线程 1

我的理解是,如果在多个 CPU 中,节点 A 线程在 CPU1 上运行,而节点 B 线程在 CPU 2 上运行,则自旋锁被击败。

由于 while 循环中的测试不再是原子的,因此可能存在两种 while 循环的计算结果为 false 的情况。

我的理解对吗??????如果是,是否有不使用整体互斥锁的解决方案。

0 投票
1 回答
1203 浏览

c - 如何使用 pthread_cancel 避免内存泄漏?

我有一个程序应该启动一个线程。为了避免退出软件,线程在无限循环中运行,我加入了线程。这个线程永远不应该返回一个值。所以现在我有一个问题,在我调用 pthread_cancel valgrind 后检测到内存泄漏。如何避免这种内存泄漏?

Valgrind 输出:

代码: