C语言pthread多线程中random_r用法

在用c语言调用<pthread.h>写多线程多线程程序时会遇到这样的问题:

在并行域有random()函数的并行程序中,多线程竟然比单线程要慢的多,其也并不是因为假共享的问题,那么到底是什么原因呢?

原因是random()并不是线程安全的,用其在多线程程序中生成随机数是不合适的。

 

解决办法是什么?

c语言中<stdlib.h>中专门提供了random_r()函数来提供多线程程序下的随机数生成功能,linux的官方手册如下:

http://www.man7.org/linux/man-pages/man3/random_r.3.html

 

stackoverflow上的相关段错误的讨论

https://stackoverflow.com/questions/18066086/multi-threaded-random-number-generator-keeps-getting-a-segfault-at-initstate-r-f?r=SearchResults

posted @ 2023-05-08 16:17  张浩东zhanghad  阅读(85)  评论(0编辑  收藏  举报