PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] Thread safe logger 实作
楼主:
wowslr
(平凡姜太公)
2014-06-24 17:27:31
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++, Windows RTX
我想要实作一个简单的 thread safe logger 帮助我做一些纪录,
但因为 "thread safe" 这个问题有点头痛,
查了一些资料发现 fprintf 这个函式在 VC 似乎是没有保障 thread safe?
这点我不是很确定,如果他能保证两个执行绪对相同一个 FILE* 写出字串时,
字串不会发生交错,那这个问题感觉就好办?
( 开发环境不支援大部分的 C++ stdlib )
目前想到最简单的方法就是加 mutex,但考虑到在 realtime 环境下,
不是很想使用到互斥锁这种可能会影响效能的方式 (或是我这部分认知有错?)
想问一下有没有其他实践方式可以参考?
作者:
QQ29
(我爱阿蓉)
2014-06-24 19:34:00
entercriticalsection?
作者:
kwpn
(ITSST)
2014-06-24 21:55:00
log者直接写档加mutex效率较差,可以考虑多一个thread负责写档要写log的把讯息储到thread safe queue, 写档的thread再从queue里取出讯息来写档. thread safe queue可以是用mutex也可以是lock-free queue
作者: hidog (.....)
2014-06-24 22:20:00
我是不同thread各自写自己的纪录 简易做法
作者:
tjjh89017
(伊达政宗)
2014-06-24 22:33:00
What you need is Event-Driven lol (?)突然觉得libevent的应用范围有点广啊,虽然挺难用的
作者:
QQ29
(我爱阿蓉)
2014-06-24 23:29:00
请教lock free 含义是implement不用lock 等等sync物件还是说 使用上不需要额外自己lock 就叫lock free呢因为总觉得 lock free queue里面实作一定会用到lock有办法不用到吗?
作者: LiloHuang (十年一刻)
2014-06-24 23:32:00
这边应该指透过 CPU 提供的 atomic 操作才算 lock free如
http://goo.gl/VUTMKG
CAS 机制所延伸出的各种应用
作者:
QQ29
(我爱阿蓉)
2014-06-25 01:09:00
很像win32 interlocked那些api但跟queue那些结构怎扯上关系实在不明白~还是说提供atomic 就叫lock free呢
作者:
Killercat
(杀人猫™)
2014-06-25 09:44:00
1. 丢queue用polling方式来作log2. 可以用syslog来作这种杂事
作者: LiloHuang (十年一刻)
2014-06-25 09:47:00
Win32 API 中的 Interlocked* 系列,就是要做 cmpxchglockfree queue 借由 CAS 机制来原子性的交换头尾指标这是boost lockfree queue的实作
http://goo.gl/bUQvZ3
看完程式码就会非常清楚的知悉,atomic CAS 机制的应用
作者:
Killercat
(杀人猫™)
2014-06-25 13:13:00
C++11有atomic家族可以作类似的行为
http://en.cppreference.com/w/cpp/atomic
atomic/interlocked都统称lockless, 因为他们都是可以在“不须lock”的情况下正确运行。用C++11标准去作吧
楼主:
wowslr
(平凡姜太公)
2014-06-25 22:43:00
http://ppt.cc/gTkH
问一下这篇在现在CPU架构是安全的吗?
继续阅读
[问题] 非静态,access by type 的 data member
yoco315
[问题] Sate Machine写法
kingzero
[问题] 影像 - 物件追踪相关问题
oopigoo
[问题] 建构子问题
pujols05
[问题] 复制建构子避免 assign 给自己
yayax
Re: [问题] 如何得知一串数字由几个数字组成
pilimtv
Re: [问题] 如何得知一串数字由几个数字组成
RealJack
[问题] 所有的循环一定能转递回写法?
alfadick
Re: [问题] openmp for loop 多循环 parallel
johnjohnlin
[问题] openmp for loop 多循环 parallel
manquentin
Links
booklink
Contact Us: admin [ a t ] ucptt.com