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上的相关段错误的讨论

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

本文转载于网络 如有侵权请联系删除

相关文章

  • 斯坦福李飞飞团队新研究登 Nature 子刊:实现可信 AI,数据的设计、完善、评估是关键

    来源:AI科技评论本文约4100字,建议阅读7分钟数据的设计、完善、评估三大步骤是关键。复制在当前AI模型的开发以模型为中心转向以数据为中心的趋势下,数据的质量变得尤为重要。在以往的AI开发流程中,数据集通常是固定的,开发工作的重点是迭代模型架构或训练过程来提高基准性能。而现在,数据迭代成为重心,因此我们需要更系统的方法来评估、筛选、清洗和注释用于训练和测试AI模型的数据。最近,斯坦福大学计算机科学系的WeixinLiang、李飞飞等人在《自然-机器智能》上共同发表了一篇题为“Advances,challengesandopportunitiesincreatingdatafortrustworthyAI”的文章,在AI数据全流程的各个环节上讨论了保证数据质量的关键因素和方法。论文地址:https://www.nature.com/articles/s42256-022-00516-1.epdf?sharing_token=VPzI-KWAm8tLG_BiXJnV9tRgN0jAjWel9jnR3ZoTv0MRS1pu9dXg73FQ0NTrwhu7Hi_VBEr6peszIAFc6X

  • 反爬战斗之随机User-Agent请求头 fake_useragent 模块的使用 和 各种请求报错解决

    反爬战斗系列从今天就会不断更新内容了,还有每日一技系列不能在堕落下去了加油 在爬虫中,最基础的反爬就是User-Agent请求头,但是也不能手动写出那么多真实的请求头呀,这时候就要用上神奇的fake_useragent模块了 那么接下来就简单讲讲这个fake_useragent模块文档地址:https://pypi.org/project/fake-useragent/它可以返回各种浏览器的各个版本的请求头,主流的firefox,chrome,safariden等等安装 pip3installfake_useragent复制使用fromfake_useragentimportUserAgent ua=UserAgent() #随机返回请求头 print(ua.random) #随机返回ie请求头 print(u.ie) #随机返回chrom请求头 print(u.chrome)复制#但由于本地网络等各种原因,无法获取请求头根本的解决办法就是:把所有的请求头保存到本地 为了方便以后使用,我已经整理好了几份不同格式的请求头,代码已放到GitHubhttps://github.com/Meh

  • minikube addons enable ingress 启动错误

    开启minkubeingress时错误minikubeaddonsenableingress--alsologtostderrVerifyingingressaddon... ?Verifyingingressaddon... I100216:59:15.398329827754kapi.go:75]Waitingforpodwithlabel"app.kubernetes.io/name=ingress-nginx"inns"kube-system"... I100216:59:15.416235827754kapi.go:86]Found2Podsforlabelselectorapp.kubernetes.io/name=ingress-nginx I100216:59:15.416270827754kapi.go:96]waitingforpod"app.kubernetes.io/name=ingress-nginx",currentstate:Pending:[<nil>] I100216:59:15.

  • 非零均值?激活函数也太硬核了!

    1.为什么要有激活函数若网络中不用激活函数,那么每一层的输出都是输入的线性组合。无论神经网络有多少层,网络的输出都是输入的线性组合,这种网络就是原始的感知机(Perceptron)。若网络没有激活函数,则每层就相当于矩阵相乘,深层神经网络,无非是多矩阵相乘。激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。网络使用非线性激活函数后,可以增加神经网络模型的非线性因素,网络可以更加强大,表示输入输出之间非线性的复杂的任意函数映射。网络的输出层可能会使用线性激活函数,但隐含层一般都是使用非线性激活函数。2.非零均值的问题(non-zero-centered)部分激活函数是非零均值的,如ReLU,Sigmoid等激活函数,他会造成网络收敛很慢。我们可以简单看下表示式:f=\left(w_{i}x_{i}+b\right),其中x_{i}为sigmoid函数的输出。那么,在计算损失函数后,需要进行反向传播更新该权重w_{i}。这时候,对w_{i}进行求导,是直接与x_{i}相关的,而因为x_{i}是大于0的值,所以这时候的梯度方

  • 聚焦 Android 11: Android 11 应用兼容性

    作者/Android产品经理DianaWong在往期#11WeeksOfAndroid系列文章中我们介绍了联系人和身份、隐私和安全,本期将聚焦 Android11兼容性。我们将为大家陆续带来#11WeeksOfAndroid内容,深入探讨Android的各个关键技术点,您不会错过任何重要内容。Android11兼容性本期我们将重点探讨Android11兼容性这一对所有开发者都非常重要的主题。对于Android,应用兼容性一词指应用可以在特定版本的Android(通常是最新版本)上正常运行。您可以前往官方网站详细获取可帮助您进行兼容性测试的资源,以及本期所有关于该领域的实用内容和资源!更轻松实现应用与Android11兼容在每次版本更新中,我们都希望尽量减少应用适配Android所需的工作。在Android11中,我们添加了新的流程、开发者工具和版本发布里程碑,以帮助我们最大程度地减少平台更新带来的影响,更轻松实现应用的兼容性。最大限度地降低行为变更影响: 我们的目标始终如一,即在您将应用的 targetSdkVersion 设置为Android11之前,尽可能将这些变更设置为可选项,最

  • 这个函数 f 实现了什么功能?

    下面函数f实现了什么功能?deff(nums): iflen(nums)<=1: returnnums p=nums[len(nums)//2] left=[xforxinnumsifx<p] middle=[xforxinnumsifx==p] right=[xforxinnumsifx>p] returnf(left)+middle+f(right)复制如果你读以上代码有困难,不要紧,只要你搞懂了,你今天就会进步。一般,刚接触编程的朋友,理解递归可能有些吃力。其实,对于编程多年的朋友可能平时也不太习惯使用递归。不过某些场景,使用递归会让代码更漂亮。上面函数f就是一个例子。理解递归,要把握两点:递归基递归方程就f而言,递归基是下面两行代码:iflen(nums)<=1: returnnums复制它确保递归可以正常退出,从上而下去,再从下而上回,这里所谓的下就是指递归基。递归方程确保问题规模逐渐接近递归基,也指问题规模从大变小的一个过程。就本f而言,它的递归方程:其中,所以每递归一次,问题规模就会变小一点,直到满足递归基。叨叨这么久,到底f实现啥功能?每次找出n

  • golang 服务平滑重启小结

    标签:gracefulendlesssupervisordefunct背景在业务快速增长中,前期只是验证模式是否可行,初期忽略程序发布重启带来的暂短停机影响。当模式实验成熟之后会逐渐放量,此时我们的发布停机带来的影响就会大很多。我们整个服务都是基于云,请求流量从四层->七层->机器。要想实现平滑重启大致有三种方案,一种是在流量调度的入口处理,一般的做法是ApiGateway+CD,发布的时候自动摘除机器,等待程序处理完现有请求再做发布处理,这样的好处就是程序不需要关心如何做平滑重启。第二种就是程序自己完成平滑重启,保证在重启的时候listensocketFD(文件描述符)依然可以接受请求进来,只不过切换新老进程,但是这个方案需要程序自己去完成,有些技术栈可能实现起来不是很简单,有些语言无法控制到操作系统级别,实现起来会很麻烦。第三种方案就是完全docker,所有的东西交给k8s统一管理,我们正在小规模接入中。golang程序平滑重启框架与java、net等基于虚拟机的语言不同,golang天然支持系统级别的调用,平滑重启处理起来很容易。从原理上讲,基于linuxfork子进

  • tf.RunOptions

    __init____init__(**kwargs)复制ChildClassesclassExperimentalPropertiesdebug_optionsDebugOptionsdebug_optionsexperimentalExperimentalexperimentalinter_op_thread_poolint32inter_op_thread_pooloutput_partition_graphsbooloutput_partition_graphsreport_tensor_allocations_upon_oomboolreport_tensor_allocations_upon_oomtimeout_in_msint64timeout_in_mstrace_levelTraceLeveltrace_levelMethodsByteSizeByteSize()复制ClearClear()复制ClearFieldClearField(field_name)复制DiscardUnknownFieldsDiscardUnknownFields()复制FindInitia

  • git 入门教程之冲突合并 原

    如果足够幸运的话,团队成员互不影响,彼此相安无事,大家各自基于master分支的某个commit创建自己的分支,平时在分支上独立工作,等到一段时间后再合并merge到master分支,这样一样master作为各个功能的集大成者,最终完成项目.然而事情总不是一帆风顺的,团队协作时由于意见不同,遇到冲突简直是家常便饭,既然无法回避冲突,当冲突发生时如何应该呢?背景基于master分支上的某个commit,新功能由此继续开发:echo"gitcommitc1">>test.txt $gitaddtest.txt $gitcommit-m"gitcommitc1"复制新功能分支命名为feature,使用gitcheckout-b<name>创建分支并切换:$gitcheckout-bfeature Switchedtoanewbranch'feature' $复制在新功能feature分支上开发新功能,并提交:$echo"gitcommitc2">>test.txt $gitad

  • ACL 禁止投稿论文提交 arXiv,双盲评审真的有效吗?

    新智元报道来源:综合cacm.acm.org等编译:肖琴、小潘【新智元导读】近日,ACL(计算语言学协会)更新了其会议论文的投稿、评审和引用政策。其中最受争议的一项要求是,为了双盲评审的有效性,禁止投稿论文在截止日期前的1个月时间内在arXiv等平台公开预印本。匿名评审的有效性如何,应该怎样保证这种政策的公平性,值得重新思考。近日,ACL(计算语言学协会)更新了其会议论文的投稿、评审和引用政策。其中最受争议的一项要求是,为了双盲评审的有效性,禁止投稿论文在截止日期前的1个月时间里在arXiv等平台公开预印本,直到论文评审结果公布。这些新要求引起一些质疑双盲评审有效性的声音,不过,多数研究人员表示支持新政。斯坦福大学NLPGroup的主任、2015年曾任ACL主席的ChristopherManning也针对ACL的新政做了详细的解释。ACL会议的提交、评审和引用政策:为ACL会议(ACL、NAACL、EACL)和TACL期刊采用以下政策,以维护双盲评审,同时不牺牲预印出版的积极效果。这些政策实际上适用于所有的ACL会议,从2018年1月1日的提交截止日期开始。我们推荐与ACL会议关联的其

  • iOS 11 安全区域适配总结

    |导语本文主要是对iOS11下企鹅FMAPP中tableView内容下移20pt或下移64pt的问题适配的一个总结。内容包括五个部分:问题的原因分析、adjustContentInset属性的计算方式、什么情况下的tableView会发生内容下移、有哪些解决方法、解决这个问题时遇到的另外一个小问题。一、iOS11下APP中tableView内容下移20pt或下移64pt的原因分析问题如下图所示:1.原因分析原因是iOS11中Controller的automaticallyAdjustsScrollViewInsets属性被废弃了,所以当tableView超出安全区域时系统自动调整了SafeAreaInsets值,进而影响adjustedContentInset值,在iOS11中决定tableView的内容与边缘距离的是adjustedContentInset属性,而不是contentInset。adjustedContentInset的计算方式见本文第二部分内容。因为系统对adjustedContentInset值进行了调整,所以导致tableView的内容到边缘的距离发生了变化,导致

  • 腾讯云多媒体处理新增拼接模板api接口

    功能描述CreateMediaTemplate用于新增拼接模板。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 请求请求实例POST/templateHTTP/1.1 Host:<BucketName-APPID>.ci.<Region>.myqcloud.com Date:<GMTDate> Authorization:<AuthString> Content-Length:<length> Content-Type:application/xml <body>复制 说明: Authorization:AuthString(详情请参见请求签名文档)。 请求头此接口仅使用公共请求头部,详情请参见公共请求头部文档。 请求体该请求操作的实现需要有如下请求体。 <Request> <Tag>Concat</Tag> <Name>Tem

  • vue2和vue3比较

    vue2和vue3比较 一.vue3新特性:   1.数据响应重新实现(ES6的proxy代替Es5的Object.defineProperty)   2.源码使用ts重写,更好的类型推导   3.虚拟DOM新算法(更快,更小)   4.提供了compositionapi,为更好的逻辑复用与代码组织   5.自定义渲染器(app、小程序、游戏开发)   6.Fragment,模板可以有多个根元素 二.vue2vue3响应原理对比   1.vue2使用Object.defineProperty方法实现响应式数据   2.缺点:     无法检测到对象属性的动态添加和删除     无法检测到数组的下标和length属性的变更   3.解决方案:     vue2提供Vue.$set动态给对象添加属性     Vue.$delete动态删除对象属性     重写数组的方法,检测数组变更 ------------------------------------------------------------------------------------   1.vue3使用proxy实现

  • 【洛谷P2485】计算器

    BSGS模板题 代码如下 #include<bits/stdc++.h> usingnamespacestd; typedeflonglongLL; LLfpow(LLa,LLb,LLc){ LLret=1%c; for(;b;b>>=1,a=a*a%c){ if(b&1){ ret=ret*a%c; } } returnret; } LLbsgs(LLa,LLb,LLp){ b%=p; unordered_map<LL,LL>mp; LLt=(LL)sqrt(p)+1; for(inti=0;i<t;i++){ LLval=b*fpow(a,i,p)%p; mp[val]=i; } a=fpow(a,t,p); if(a==0)returnb==0?1:-1; if(b==0)return-1; if(b==1)return0; for(inti=0;i<=t;i++){ LLval=fpow(a,i,p); LLj=mp.find(val)==mp.end()?-1:mp[val]; if(j>=0&&am

  • 03.点一个灯

     点灯   学习之前请先安装KEILC51软件,在学会使用汇编语言后,学习C语言编程是一件比较容易的事,我们将通过一系列的实例介绍C语言编程的方法。图1-1所示电路图使用89c51单片机作为主芯片,这种单片机性属于80C51系列,其内部有8K的FLASHROM,可以反复擦写,非常适于做实验。89c51的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的任务是让接在P1引脚上的发光二极管按要求发光。    1 简单的C程序介绍 例1-1:让接在P1.0引脚上的LED发光。/************************************************单灯闪烁程序*************************************************/#include"reg51.h"//这一句是将51的常用端口,内部寄存器等的定义文件包含进这段程序sbitP1_0=P1^0;voidmain(){ P1_1=0;}       

  • FastQC

    1、下载fastqc wget http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip 2、解压 unzipfastqc_v0.11.5.zip   3、给予执行权限,否则执行的时候会显示没有权限 cdFastQCchmod755fastqc   4、加入到PATH exportPATH=/home/h/FastQC/:$PATH   5、测试 fastqc--help 使用例子 fastqc-o./tmp.result/fastQC/-t6./tmp.data/fastq/H1EScell-dnase-2014-GSE56869_20151208_SRR1248176_1.fq #-o--outdirFastQC生成的报告文件的储存路径,生成的报告的文件名是根据输入来定的 #-t--threads选择程序运行的线程数,每个线程会占用250MB内存,越多越快咯     FastQC的报告介绍

  • 魔术师猜数【更优解】

    任务描述 在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。例如,观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:“你算错了!”。请编程模拟这个数字魔术游戏。 编程要求 根据提示,在右侧编辑器补充代码,要求用函数实现,函数原型为:intmagic(intm);其中形参m代表观众计算的和值,返回值是观众心里想的原数abc。如果观众计算错误,请返回-1。main函数已隐藏,接受的输入包含t+1个正整数,第一个是测试次数t,随后t个则是观众计算的和值,程序计算输出t个结果。 普通解法是穷举,直接枚举abc,如果满足条件就输出,易证解至多一个,代码很好打就不给了 思考了一下,要求观众记下五个数之和,但可以发现abc的排列是A(3,3)=6的,然后看了一下五个数中恰好少了abc,也就是说我们可以枚举六个数之和减去观众给的m

  • hdu1695 GCD(莫比乌斯入门题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:  给出n、m、k,求出1<=x<=n,1<=y<=m且gcd(x,y)==k的(x,y)的对数 解析: 显然就是求[1,n/k]与[1,m/k]有多少数对的最大公约数是1 莫比乌斯入门题 我们设     为满足且和的的对数    为满足且和的的对数  那么,很显然,反演后得到 我们所需要的答案便是 f(1)= ∑i=1µ(i)*(n/i)*(m/i) ,求解这个式子我们可以分块求和,复杂度为O(√n)。 最后注意由于题目要求,需要将重复的去掉。 代码如下: 1#include<iostream> 2#include<cstdio> 3#include<cmath> 4#include<cstring> 5 6usingnamespacestd; 7constintmaxn=10001

  • About me?

    18岁,是OIer 退役OIer,现在同济大学人文科学试验班,已经上学的战雷玩家。 准备搞搞ACM,希望大一结束后能run到同济的CS。run不掉就得去南极学鹅语了 我的常用id是Tommy_clas,我的洛谷博客里有几篇高中时期写的小说,目前还在连载,希望我大学时期能有时间更完。 顺带一提,这个博客本来是我的高中同学asuldb的,但他大学期间并不准备搞算法竞赛相关了,于是就把博客交给了我。所以在2021年之前的博客上的题目我可能不太会,如果有问题的话也可以问我,我可以转告他。 QQ:1538482243,欢迎大家加我qq可以听我讲《伏狐》《人妖》《凤仙》等经典故事,也可以跟我一起开飞机干纳粹。 最后为我的小说打打广告: 《花花的奇妙冒险》 《潮色警戒》 《潮特猎车手》

  • 解决vue跨域axios异步通信

    在项目中,常常需要从后端获取数据内容。特别是在前后端分离的时候,前端进行了工程化部署,跨域请求成了一个前端必备的技能点。好在解决方案很多。 在vue中,在开发中,当前使用较多的是axios进行跨域请求数据,但不少人遇到如下问题: 异步通信,无法同步执行 无法集中管理 不便阅读 还未请求成功就调转了 then里面的逻辑越来越繁杂 以往的网络请求的写法如下: //main.js //引入axios importaxiosfrom'axios' Vue.prototype.$axios=axios; 复制 //vue页面中的使用 //get leturl='地址' this.$axios.get(url,{ params:{}//参数信息 }) .then((res)=>{ //成功后执行语句 }) .catch((err)=>{ //网络中断或失败执行语句 }) //post leturl='地址' this.$axios.post(url,{ //参数信息 }) .then((res)=>{ //成功后执行语句 }) .catch((err)=>{ //

  • EF 联合查询

    EF文章表和标签表联合查询标签id在dis中的文章,还不知道性能如何 var query=tagRepo.Entities.Include("Tags").Where(t=>ids.Contains(t.ID)).SelectMany(t=>t.Articles).Distinct(); 或者 var query=articleRepo.Entities.Include("Tags").Where(t=>t.Tags.Any(x=>ids.Contains(x.ID)));

相关推荐

推荐阅读