多线程结果变慢

时间:2015-05-26 12:56:42

标签: c++ multithreading pthreads

基本上我之前没有做过多线程编程。从概念上讲,我知道它。

所以从一些随机数生成编码开始。代码正在运行,但它产生的结果比单线程程序慢。所以想知道我的代码中的漏洞以及如何提高性能。

所以如果我要随机生成1-1500个数字,使用单线程和10个线程(或5个线程)。单线程执行得更快。线程切换或锁定似乎需要时间。那怎么处理呢?

pthread_mutex_t   map_lock;
std::set<int> numSet;
int randcount=0;

static void *thread_fun (void *arg)
{
    int randNum= *(int *)arg;
    int result;
    std::set<int> findItr;

        while (randcount !=  randNum -1 ) {
        result = rand ()%randNum;

        if (result == 0) continue;
             pthread_mutex_lock (&map_lock);
             const bool is_in = (numSet.find (result) != numSet.end ());
             if  (!is_in)
             {
                numSet.insert (result);
                printf (" %d\t", result);
                randcount++;
             }

             pthread_mutex_unlock (&map_lock);
        }

}

1 个答案:

答案 0 :(得分:1)

由于大多数代码都阻塞了所有并行线程(因为它位于 pthread_mutex_lock(&amp; map_lock); pthread_mutex_unlock(&amp; map_lock); 块之间) ,你的代码就像只运行并行化的开销顺序运行一样。

提示:尝试仅收集线程中的结果,然后将它们传递回将显示它们的主线程。此外,如果您没有并行访问您的设置,但是从每个线程传回部分列表,则您不必处理并发性,从而降低代码速度。