基本上我之前没有做过多线程编程。从概念上讲,我知道它。
所以从一些随机数生成编码开始。代码正在运行,但它产生的结果比单线程程序慢。所以想知道我的代码中的漏洞以及如何提高性能。
所以如果我要随机生成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);
}
}
答案 0 :(得分:1)
由于大多数代码都阻塞了所有并行线程(因为它位于 pthread_mutex_lock(&amp; map_lock); 和 pthread_mutex_unlock(&amp; map_lock); 块之间) ,你的代码就像只运行并行化的开销顺序运行一样。
提示:尝试仅收集线程中的结果,然后将它们传递回将显示它们的主线程。此外,如果您没有并行访问您的设置,但是从每个线程传回部分列表,则您不必处理并发性,从而降低代码速度。