我正在尝试比较 Linux 上 boost::atomic 和 pthread 互斥锁的性能:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER ;
int g = 0 ;
void f()
{
pthread_mutex_lock(&mutex);
++g;
pthread_mutex_unlock(&mutex);
return ;
}
const int threadnum = 100;
int main()
{
boost::threadpool::fifo_pool tp(threadnum);
for (int j = 0 ; j < 100 ; ++j)
{
for (int i = 0 ; i < threadnum ; ++i)
tp.schedule(boost::bind(f));
tp.wait();
}
std::cout << g << std::endl ;
return 0 ;
}
是时候了:
real 0m0.308s
user 0m0.176s
sys 0m0.324s
我也试过 boost::atomic:
boost::atomic<int> g(0) ;
void f()
{
++g;
return ;
}
const int threadnum = 100;
int main()
{
boost::threadpool::fifo_pool tp(threadnum);
for (int j = 0 ; j < 100 ; ++j)
{
for (int i = 0 ; i < threadnum ; ++i)
tp.schedule(boost::bind(f));
tp.wait() ;
}
std::cout << g << std::endl ;
return 0 ;
}
是时候了:
real 0m0.344s
user 0m0.250s
sys 0m0.344s
我多次运行它们,但时间结果相似。
atomic 真的可以帮助避免由 mutex/semaphore 引起的系统调用开销吗?
任何帮助将不胜感激。
谢谢
更新:将循环数增加到 1000000
for (int i = 0 ; i < 1000000 ; ++i)
{
pthread_mutex_lock(&mutex);
++g;
pthread_mutex_unlock(&mutex);
}
类似于 boost::atomic 。
通过“time ./app”测试时间
使用提升:原子:
real 0m13.577s
user 1m47.606s
sys 0m0.041s
使用 pthread 互斥锁:
real 0m17.478s
user 0m8.623s
sys 2m10.632s
似乎 boost:atomic 更快,因为 pthread 使用更多时间进行系统调用。
为什么 user time + sys 大于 real time ?
欢迎任何意见!