推 QQ29:entercriticalsection? 06/24 19:34
推 kwpn:log者直接寫檔加mutex效率較差,可以考慮多一個thread負責寫檔 06/24 21:55
→ kwpn:要寫log的把訊息儲到thread safe queue, 寫檔的thread再從 06/24 21:56
→ kwpn:queue裡取出訊息來寫檔. thread safe queue可以是用mutex也可 06/24 21:56
→ kwpn:以是lock-free queue 06/24 21:57
推 hidog:我是不同thread各自寫自己的紀錄 簡易做法 06/24 22:20
推 tjjh89017:What you need is Event-Driven lol (?) 06/24 22:33
→ tjjh89017:突然覺得libevent的應用範圍有點廣啊,雖然挺難用的 06/24 22:34
推 QQ29:請教lock free 含義是implement不用lock 等等sync物件 06/24 23:29
→ QQ29:還是說 使用上不需要額外自己lock 就叫lock free呢 06/24 23:30
→ QQ29:因為總覺得 lock free queue裡面實作一定會用到lock有辦法不 06/24 23:31
→ QQ29:用到嗎? 06/24 23:31
推 LiloHuang:這邊應該指透過 CPU 提供的 atomic 操作才算 lock free 06/24 23:32
推 QQ29:很像win32 interlocked那些api 06/25 01:09
→ QQ29:但跟queue那些結構怎扯上關係實在不明白~ 06/25 01:09
→ QQ29:還是說提供atomic 就叫lock free呢 06/25 01:10
推 Killercat:1. 丟queue用polling方式來作log 06/25 09:44
→ Killercat:2. 可以用syslog來作這種雜事 06/25 09:44
推 LiloHuang:Win32 API 中的 Interlocked* 系列,就是要做 cmpxchg 06/25 09:47
→ LiloHuang:lockfree queue 藉由 CAS 機制來原子性的交換頭尾指標 06/25 09:48
→ LiloHuang:看完程式碼就會非常清楚的知悉,atomic CAS 機制的應用 06/25 09:50
→ Killercat:C++11有atomic家族可以作類似的行為 06/25 13:13
→ Killercat:atomic/interlocked都統稱lockless, 因為他們都是可以 06/25 13:13
→ Killercat:在「不須lock」的情況下正確運行。用C++11標準去作吧 06/25 13:14