【问题标题】:C++ - Optimal number of threads for processing string [closed]C ++ - 处理字符串的最佳线程数[关闭]
【发布时间】: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 不是线程安全的。

标签: c++ multithreading c++11 pthreads stdthread


【解决方案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中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2013-07-18
    相关资源
    最近更新 更多