在用c语言调用<pthread.h>写多线程多线程程序时会遇到这样的问题:
在并行域有random()函数的并行程序中,多线程竟然比单线程要慢的多,其也并不是因为假共享的问题,那么到底是什么原因呢?
原因是random()并不是线程安全的,用其在多线程程序中生成随机数是不合适的。
解决办法是什么?
c语言中<stdlib.h>中专门提供了random_r()函数来提供多线程程序下的随机数生成功能,linux的官方手册如下:
http://www.man7.org/linux/man-pages/man3/random_r.3.html
stackoverflow上的相关段错误的讨论