PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] multi-thread计时的问题
楼主:
icetofux
2020-06-06 20:34:23
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux/Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
如下列网址的程式码。
1.我建立一个thread,每50mS把目前的time_point作为timestamp储存至
atomic型态的变量中。
2.在主thread中,持续观测timestamp与现在时间的时间差。
喂入的资料(Input):
无
预期的正确结果(Expected Output):
每次观测timestamp与现在时间的时间差不会大于50mS。
错误结果(Wrong Output):
偶发性的会出现大于50mS的时间差,其时间大于50mS几十个mS。
如果要解释为处理while loop中其他动作的时间,似乎又有点太长了。
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://onlinegdb.com/HypIjZKnL
补充说明(Supplement):
猜测问题可能是出自于我对std::atomic或是std::chrnon的误用,但目前还没有
找到明确的方向。
期望有经验的人可以指点一下。
作者:
Lipraxde
(Lipraxde)
2020-06-06 21:12:00
这应该跟电脑当下忙不忙、OS scheduling 有关偶尔会超时应该算正常
作者:
nh60211as
2020-06-06 21:26:00
刚刚测,跟楼上说得差不多我正常跑你的code不会印东西,我限制cpu到ㄧ颗的话每次都会印,应该是main跟timer一直交换cpu使用权
楼主:
icetofux
2020-06-06 21:47:00
刚刚试了一下,在timestamp的存取加入了std::memory_order_consume跟std::memory_order_release就不再超时了。这样看起来好像又跟atomic有点关系@
[email protected]
作者:
Lipraxde
(Lipraxde)
2020-06-06 22:19:00
看来是跟受到 memory order 的影响...你的电脑比较特殊吗?
楼主:
icetofux
2020-06-06 23:58:00
只是一般X86 PC而已,不过有趣的是即便加上memory order以后,在GDB online网站跑还是有超时现象,我的电脑上跑却不会。
作者: HSUFIT (FireDance)
2020-06-07 00:19:00
别在网站上测速度,我刚刚跑发现网站的稳定度很差你可以设定affinity让他们跑在同一个CPU上,再统计超时数
作者:
Lipraxde
(Lipraxde)
2020-06-07 10:10:00
试试看在 main 里的 while 加个 sleep,让它不要那么频繁的 load 看看可能是它一直读导致另一个 thread 写不进去
楼主:
icetofux
2020-06-07 12:57:00
回Lipraxde,这个方法有效,感谢!
继续阅读
[问题] Linked List的delete用法
Ruination
[问题] 想要有全域变量效果但是能控制lifetime
ofd168
[问题] 新增object时候,自动新增执行
ofd168
[问题] C++ SLT map<struct*,int> 的行为??
s89162504
[问题] IEEE 754 浮点数运算以及rounding请益
ayn775437403
[问题] 做到读取和绘制shapefile或tiff档的视窗
e25820
[闲聊] CompilerDev编译器开发 新版连署
mshockwave
[问题] SerialPort读取长度
getaway
[问题] main()和main(void)的差别
pandaren0905
[问题] 不能无法用malloc初始化物件
ericerix
Links
booklink
Contact Us: admin [ a t ] ucptt.com