多线程导致速度变慢

Multithreading result into slower

本文关键字:速度 多线程      更新时间:2023-10-16

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

所以开始与随机数生成一些什么编码。代码是工作的,但它产生的结果比单线程程序慢。所以想知道在我的代码漏洞和如何提高性能。

所以如果我尝试随机生成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 (" %dt", result);
                randcount++;
             }
             pthread_mutex_unlock (&map_lock);
        }
}

由于您的大部分代码阻塞了所有并行线程(因为在pthread_mutex_lock (&map_lock);pthread_mutex_unlock (&map_lock);块之间),因此您的代码工作起来就像顺序运行一样,只是并行化的开销。

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