问题标签 [pthreads]

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 回答
8429 浏览

multithreading - 将 gprof 与 pthread 一起使用

gprof 可以用来分析使用 pthread 的多线程程序吗?也就是说,它的输出是否包括所有线程中使用的时间?

0 投票
8 回答
24740 浏览

c++ - 事件/任务队列多线程 C++

我想创建一个可以从多个线程调用其方法的类。但不是在调用它的线程中执行该方法,而是应该在它自己的线程中执行它们。不需要返回结果,也不应该阻塞调用线程。

我在下面包含的第一次尝试实现。公共方法将函数指针和数据插入到作业队列中,然后工作线程会拾取该作业队列。然而,它并不是特别好的代码,并且添加新方法很麻烦。

理想情况下,我想将它用作一个基类,我可以轻松地添加方法(具有可变数量的参数),同时减少麻烦和代码重复。

有什么更好的方法来做到这一点?是否有任何现有的代码可以做类似的事情?谢谢

0 投票
6 回答
20185 浏览

multithreading - 并行化:pthreads 还是 OpenMP?

科学计算领域的大多数人在共享内存并行化方面使用 OpenMP 作为准标准。

是否有任何理由(除了可读性)在 pthreads 上使用 OpenMP?后者似乎更基本,我怀疑它可能更快更容易优化。

0 投票
2 回答
2497 浏览

c++ - pthreads 编译但未创建二进制文件

我正在尝试编译一个我用 C++ 编写的程序,用于使用 pthread 的赋值。我在 Linux 中使用 Eclipse,在将“-lpthread”添加到编译器参数(到 g++、gcc 和链接器)之后,我没有任何编译问题。但是,当我要运行和调试时,Eclipse 给了我一个错误消息窗口“启动失败。找不到二进制文件。”

我尝试使用 gcc 和 g++ 手动编译它,后缀为 -pthread 和 -lpthread,结果类似 - “gcc: –pthread: No such file or directory”。

不知道出了什么问题,因为它确实可以毫无问题地编译,只是不会生成 exe。我相信我可能需要 apt-get 一些东西。

我应该做什么?

0 投票
3 回答
28023 浏览

c - Pthread - time.h::sleep() 和 pthread.h::pthread_yield() 有什么区别?

我花了很长时间寻找有关 time.h::sleep() 和 pthread.h::pthread_yield() 之间差异的信息,但找不到任何可靠的参考资料,所以我发布了这个问题。

time.h::sleep() 和 pthread.h::pthread_yield() 有什么区别?

更新:

我问的原因是因为我使用 sleep() 来 sleep() 每个单独的线程......当有 8 个线程和 4 个线程时,我的应用程序开始出现问题。当我上网查看 sleep() 是否只影响每个线程时,我找不到任何好的参考说明 Sleep() 是影响整个进程还是 sleep() 只影响单个线程。

0 投票
2 回答
21967 浏览

c++ - pthread_mutex_lock 上的分段错误

我尝试做时遇到分段错误

这真的很奇怪,我不确定是什么原因造成的。我已经在构造函数中初始化了 _mutex

我能做什么?

0 投票
1 回答
2176 浏览

c++ - 使用 pthread_setspecific 和 pthread_getspecific 存储指向 std::map 实例的指针

我使用映射作为特定于线程的缓存来跟踪失败的 LDAP 搜索。我使用 pthread_setspecific 动态分配映射并存储指针。在检查缓存或增加失败计数时,我使用 pthred_getspecific 来检索 void* 指针和 static_cast 将指针返回到我的映射类型。使用 [] 运算符调用地图似乎不会影响地图的状态,并且对 map->size() 的调用总是返回 0。感觉我可能错误地使用了 pthread_getspecific 但从我的示例中看着我的代码看起来不错。

代码:


测试代码:


测试代码输出:

0 投票
1 回答
181 浏览

synchronization - 在为线程同步选择锁方面需要帮助

我有几个修改线程和一些读取线程,它们都访问全局变量 X。我想让我的同步策略是这样的:

当一个线程试图修改 X 时,它首先需要一个锁,并且几个修改线程可能需要几个锁。

当一个线程试图读取 X 时,它必须等到所有修改线程都放弃它们的锁。

linux pthread库中有没有解决这种情况的方法?非常感谢

0 投票
8 回答
18806 浏览

c - C 编程:使用 pthread 进行调试

对我来说,最难适应的事情之一是我第一次在 C 中使用 pthreads 编程的丰富经验。我习惯于确切地知道要运行的下一行代码是什么,并且我的大多数调试技术都围绕着这个期望。

在 C 中使用 pthread 进行调试有哪些好的技术?您可以在没有任何附加工具、您使用的工具或任何其他帮助您调试的情况下建议个人方法。

PS 我在 linux 中使用 gcc 进行 C 编程,但不要让这必然限制你的答案

0 投票
4 回答
366 浏览

c - 数据库事务和线程

我有函数 lock()、unlock()、query1()、query2() 和 query3()。查询函数只是在数据库上运行一些查询,可以被认为是对它的读/写访问。他们不锁定。我的系统是多线程的。

我想要的功能是:如果从线程 p1 调用 lock(),则只有来自线程 p1 的查询将运行,来自所有其他线程的查询等待解锁。我该怎么做呢?

我正在使用 C 中的 pthreads。为此,线程必须知道它持有锁。但是 pthreads 没有这样的功能。

设计错了吗??

编辑:

我希望 lock() 的行为是,如果线程已经持有该锁,它不应该等待锁。它应该只是运行。问题是我的 lock() 函数实际上启动了一个事务。我想在事务中运行一堆东西。并且 unlock() 结束事务。我希望能够链接查询。一种解决方法是在 Function1() 中调用 query3() 而不是 doQuery3(); 这意味着每个函数都有两个版本,一个带有锁定功能,一个带有普通查询()

同样,这些锁定和解锁功能可能是也可能不是互斥锁。我尝试使用 pthread mutex 实现它,但不能。因为 pthread_mutex_lock 在同一个线程块上!有什么炫酷的技巧吗??