【发布时间】:2015-02-10 15:53:51
【问题描述】:
我正在使用 pthreads 库开发 C++ 应用程序。程序中的每个线程都访问一个公共的 unordered_map。该程序在 4 个线程下比 1 个运行得慢。我在线程中注释了所有代码,只留下了标记字符串的部分。单线程执行仍然更快,所以我得出的结论是映射不是问题。 之后,我将线程的 ID 打印到屏幕上,它们似乎是按顺序执行的。
在调用线程的函数中,我有一个 while 循环,它在一个数组中创建线程,其大小是线程数(假设是“tn”)。每次创建 tn 线程时,我都会执行一个 for 循环来加入它们。 (pthread_join)。虽然运行了很多次(不仅是 4 次)。
可能出了什么问题?
【问题讨论】:
-
您是否使用互斥锁来访问地图?
-
我的魔法 8-ball 说错误在第 42 行。[即,根据对代码可能或不可能做的部分的高级描述,甚至无法猜测。]跨度>
-
慢多少?您是否使用可以从多线程中受益的架构?
-
@user3309479 你应该在问题中提到这一点。我是相关的。
-
但是当我删除关键部分并只保留标记时,它仍然较慢。还是标记化微不足道?
标签: c++ multithreading performance pthreads posix