C ++ - 处理字符串的最佳线程数[关闭]
Posted
技术标签:
【中文标题】C ++ - 处理字符串的最佳线程数[关闭]【英文标题】:C++ - Optimal number of threads for processing string [closed] 【发布时间】:2015-08-25 06:07:18 【问题描述】:我有一个长度为 N 的 std::string,我想使用线程将长度为 K 的所有子字符串插入到 std::set 容器中。我应该使用多少个 std::thread 或 pthread_t 对象?
考虑 N = 500,000 和 K = 3。
【问题讨论】:
可能与您拥有的内核一样多...但是如果您滥用多线程,它实际上会减慢您的程序(在最好的情况下),所以我建议您要么学习很多,要么坚持只要您没有充分的理由使用线程,就可以使用单个线程。 如果你想要最佳效率,可能是1。 在写信给std::set
时,您打算使用什么锁定方法?你知道std::set
不是线程安全的吗?您希望多久找到一次重复的子字符串?
我的目标是找出重复字符串出现的次数,在多线程环境中,超过 100 个不同的随机字符串。 @ChrisDrew - 我不知道 std::set
不是线程安全的。
【参考方案1】:
使用ThreadPool。
使用起来非常简单,您只需要include "ThreadPool.h"
,您就可以根据可用的内核数设置最大线程数。您的代码应包含以下片段。
int max_threads = std::thread::hardware_concurrency();
ThreadPool pool(max_threads);
auto result = pool.enqueue(func,params);
这里func
是要调用的函数,params
是参数,返回的值会存储在result
中。
【讨论】:
以上是关于C ++ - 处理字符串的最佳线程数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章