多线程导致变慢

Multithreading result into slower

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

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

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

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);
        }

}

由于您的大部分代码会阻塞所有并行线程(因为在 pthread_mutex_lock (&map_lock); 和 [=14= 之间]pthread_mutex_unlock (&map_lock); 块),您的代码的工作方式就像 运行 顺序一样,只是并行化的开销。

提示:尝试仅在您的线程中收集结果,然后将它们传回将显示它们的主线程。此外,如果您不并行访问您的集合,而是从每个线程传回部分列表,您就不必处理并发性减慢代码的问题。