質量最大vczh粉(402740419) 10:13:17
nobody(1575393351) 10:10:09
無鎖隊列,怎么可能
?
質量最大vczh粉(402740419) 10:13:23
用link做,輕輕松松
nobody(1575393351) 10:13:40
多個線程同時從隊列里面取,怎么可能不加鎖。。
uczh.0xDEADBEEF(365128087) 10:13:44
他已經發請求了
vczh四號粉絲(342775210) 10:13:51
可以不加鎖
質量最大vczh粉(402740419) 10:13:51
用link做,真心不用加鎖
vczh四號粉絲(342775210) 10:13:55
不過必須用cas
質量最大vczh粉(402740419) 10:14:03
CAS是啥
vczh四號粉絲(342775210) 10:14:06
否則做不了多線程的并發
nobody(1575393351) 10:14:13
link是什么東西
質量最大vczh粉(402740419) 10:30:26
陳梓瀚<vczh@163.com> 10:27:16
用interlocked compare exchange
當tail == null就換一個new link進去
這樣偏麻煩
vczh四號粉絲(342775210) 10:30:28
會把問題復雜化
質量最大vczh粉(402740419) 10:30:29
有簡單的辦法
uczh.0xDEADBEEF(365128087) 10:30:30
但性能很好的
質量最大vczh粉(402740419) 10:30:43
類似ngxqueue的辦法,保證鏈表里始終有一個結點
質量最大vczh粉(402740419) 10:30:49
這樣可以避免很多麻煩
uczh.0xDEADBEEF(365128087) 10:31:03
質量最大vczh粉(402740419) 10:31:07
只有構造和析構的時候 多線程訪問會出問題,但這時候一般又不會多線程訪問
vczh.Iskandar<vczh@163.com> 10:31:17
就算如此你也要對tail->next == null的時候做判斷嘛
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:31:22
質量最大vczh粉(402740419) 10:31:07
只有構造和析構的時候 多線程訪問會出問題,但這時候一般又不會多線程訪問
不要做任何假設
vczh.Iskandar<vczh@163.com> 10:31:26
這樣才能避免兩個線程同時push
質量最大vczh粉(402740419) 10:31:48
VCZH.粉絲數組[0](85126585) 10:31:22
質量最大vczh粉(402740419) 10:31:07
只有構造和析構的時候 多線程訪問會出問題,但這時候一般又不會多線程訪問
不要做任何假設
不是假設,構造還沒完成的時候就把對象傳給多個線程從設計上來說就是有毛病的
質量最大vczh粉(402740419) 10:31:59
析構也類似
質量最大vczh粉(402740419) 10:32:14
性質上和你在別的線程進行了野指針操作沒有區別
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:32:21
嗯
ooseven(147340642) 10:32:31
這樣設計的話,對象的生命周期很難控制
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:32:58
reference counting嘛
質量最大vczh粉(402740419) 10:33:00
肯定是構造完了,才丟給shared_ptr或者別的什么東西,然后才會多線程考慮持有這個對象
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:33:02
現在流行
vczh.Iskandar<vczh@163.com> 10:33:08
析構的時候
vczh.Iskandar<vczh@163.com> 10:33:13
肯定是所有shared_ptr都完蛋了
vczh.Iskandar<vczh@163.com> 10:33:17
所以這個時候也不會有人訪問了
質量最大vczh粉(402740419) 10:33:36
陳梓瀚<vczh@163.com> 10:31:17
就算如此你也要對tail->next == null的時候做判斷嘛
嗯嗯,compareandswap就是這里啊
vczh四號粉絲(342775210) 10:34:23
不僅僅是null的判斷吧
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:34:33
循環隊列里邊
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:34:44
tail->next == head
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:34:50
貌似這樣的
質量最大vczh粉(402740419) 10:34:56
循環隊列?
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:35:04
ring
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:35:06
buffer
質量最大vczh粉(402740419) 10:35:15
ringbuffer是另一個概念= =
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:35:24
囧,我錯了
質量最大vczh粉(402740419) 10:35:41
剛才那個是最簡單的,每個節點只能存一個pointer或者其它相同大小的東西
vczh四號粉絲(342775210) 10:35:43
http://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.html
質量最大vczh粉(402740419) 10:37:16
= = 堆棧這么做是找死啊
質量最大vczh粉(402740419) 10:37:19
就是算法有問題
vczh.Iskandar<vczh@163.com> 10:37:50
我覺得這個例子有問題
vczh.Iskandar<vczh@163.com> 10:37:55
你每一次push新數據進去的時候
vczh四號粉絲(342775210) 10:37:57
你的系統先把10Wtps過了,再說并發
vczh.Iskandar<vczh@163.com> 10:38:04
都不能重用節點
vczh.Iskandar<vczh@163.com> 10:38:06
都必須new一個新的
質量最大vczh粉(402740419) 10:38:45
vczh四號粉絲(342775210) 10:37:57
你的系統先把10Wtps過了,再說并發
噗,我的服務端是單進程多線程模型
質量最大vczh粉(402740419) 10:38:53
客戶端才在搞多線程
質量最大vczh粉(402740419) 10:39:04
說錯了
質量最大vczh粉(402740419) 10:39:08
服務端是單線程多金正
質量最大vczh粉(402740419) 10:41:02
我的引擎里當初做一個類似tbb那種task式的并行框架(或者類似boost.asio)
質量最大vczh粉(402740419) 10:41:20
因為趕著出工,直接拿一個lockfree的list就上了
小老鼠(273245994) 10:41:25
沈陽發生爆炸了
質量最大vczh粉(402740419) 10:41:38
結果性能還可以
vczh.Iskandar<vczh@163.com> 10:41:43
什么爆炸
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:42:35
因為趕著出工,直接拿一個lockfree的list就上了
自己寫的?
質量最大vczh粉(402740419) 10:42:51
很久很久很久以前寫的
質量最大vczh粉(402740419) 10:43:05
然后寫這個的時候不知道mem barrier
質量最大vczh粉(402740419) 10:43:11
加到引擎里的時候 加了下barrier
小老鼠(273245994) 10:43:21
9時,太原街地下通道
質量最大vczh粉(402740419) 10:43:34
當時還問了
這兩位將近一天……
小老鼠(273245994) 10:43:46
附近1公里都有震感
小老鼠(273245994) 10:43:57
你說這次會不會還是死35人.
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:44:27
牛逼
裝配腦袋(2380479792) 10:44:37
兩·會就不讓他們好好開
小老鼠(273245994) 10:43:57
你說這次會不會還是死35人.
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:44:27
牛逼
裝配腦袋(2380479792) 10:44:37
兩·會就不讓他們好好開
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:44:40
我遇到這個第一想法是開源的弄一個來
御虛舟北(314969051) 10:44:41
又黑人
質量最大vczh粉(402740419) 10:45:32
VCZH.粉絲數組[0](85126585) 10:44:40
我遇到這個第一想法是開源的弄一個來
假設需要一套整塊功能,肯定用開源的
質量最大vczh粉(402740419) 10:45:46
如果只需求一個點…… 對我們搞移動的來說,port成本太高了……
質量最大vczh粉(402740419) 10:46:00
不過本質上來說這個還是幾乎算是用開源的
質量最大vczh粉(402740419) 10:46:03
只是我人肉翻譯了下而已
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:46:35
所以昨天被問到這個問題,我很反感那個家伙,,,
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:46:44
尼瑪問這就是問我看過類似的帖子沒,,,
質量最大vczh粉(402740419) 10:47:16
帖子?
vczh一千號粉絲(327385942) 10:47:29
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:47:41
就是說我看過討論類似的論文沒有
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:47:47
看過就能說兩句
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:47:58
沒看過,面試那一點時間能想出來
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:48:01
還見鬼了
質量最大vczh粉(402740419) 10:48:17
??
質量最大vczh粉(402740419) 10:48:24
我曾經面試一個 剛畢業的小伙子,也談不上多優秀
質量最大vczh粉(402740419) 10:48:32
我面試就問的lock-free的隊列
御虛舟北(314969051) 10:48:33
剛畢業的小伙子
質量最大vczh粉(402740419) 10:48:38
還不是linked-list
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:48:44
自己想出來了?
質量最大vczh粉(402740419) 10:48:44
是deque的
質量最大vczh粉(402740419) 10:49:03
自己肯定想不出來,但已經摸到邊了啊,我稍微誘導了一下
質量最大vczh粉(402740419) 10:49:05
就出來了
vczh.Isotope(75497789) 10:49:27
菊苣們,這里能問算法題不?
質量最大vczh粉(402740419) 10:49:38
知道基本概念了這就是很直觀的東西,需要上升到論文層面么……
質量最大vczh粉(402740419) 10:49:45
復雜一點的數據結構可能需要
質量最大vczh粉(402740419) 10:49:48
至少隊列不需要啊= =
質量最大vczh粉(402740419) 10:50:18
啥算法題?工作需要還是自己瞎折騰
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:50:25
你考慮這些和我的方式不太一樣,我覺得這個東西了解就行了,自己做是下下策
我是不是得改改了?
vczh.Isotope(75497789) 10:50:44
用1*2的矩形去覆蓋m*n的矩形(m*n是偶數),問一共有多少種方法
質量最大vczh粉(402740419) 10:50:52
VCZH.粉絲數組[0](85126585) 10:50:26
你考慮這些和我的方式不太一樣,我覺得這個東西了解就行了,自己做是下下策
做事的方式 和考察、自我考察的方式是兩碼事
質量最大vczh粉(402740419) 10:51:31
不然vczh大牛也不會做編譯器和GUI了,反正也沒人用
vczh.Iskandar<vczh@163.com> 10:51:51
小老鼠(273245994) 10:52:15
內傷了
質量最大vczh粉(402740419) 10:52:38
vczh.Isotope(75497789) 10:50:44
用1*2的矩形去覆蓋m*n的矩形(m*n是偶數),問一共有多少種方法
ACM題?滾邊去。我會,就是不告訴你
質量最大vczh粉(402740419) 10:52:40
ACM毒害人
vczh.Iskandar<vczh@163.com> 10:52:54
做ACM踢掉(逃
質量最大vczh粉(402740419) 10:53:02
vczh.Isotope(75497789) 10:53:05
不是ACM題
vczh的腦殘粉(195719555) 10:53:08
vczh.Ismeow(65200296) 10:53:10
為什么踢掉……
vczh.Iskandar<vczh@163.com> 10:53:14
這些就是
vczh.Isotope(75497789) 10:53:17
好像是MS面試題
vczh.Iskandar<vczh@163.com> 10:53:21
這個群使用來討論奇技淫巧的
vczh.Iskandar<vczh@163.com> 10:53:27
這是google的面試題,M$才不面這個
vczh.Konobuta(450635425) 10:53:48
看了下
vczh.Konobuta(450635425) 10:54:05
用了原子指令
質量最大vczh粉(402740419) 10:54:07
這是百度的面試題,google才不面這個
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:54:08
質量最大vczh粉(402740419) 10:50:52
VCZH.粉絲數組[0](85126585) 10:50:26
你考慮這些和我的方式不太一樣,我覺得這個東西了解就行了,自己做是下下策
做事的方式 和考察、自我考察的方式是兩碼事
不然vczh大牛也不會做編譯器和GUI了,反正也沒人用 
受教了,擠時間還是多把這些東西實現一下
vczh一千號粉絲(327385942) 10:54:50
vczh一千號粉絲(327385942) 10:55:12
做acm題還是不錯的
Sean(123983971) 10:55:15
小矩形可以重疊嗎?
vczh.Konobuta(450635425) 10:55:16
實際上還是相當于加鎖,只是粒度更小
vczh.Konobuta(450635425) 10:55:32
就怕有的平臺不支持
vczh.Iskandar<vczh@163.com> 10:55:42
不支持CAS的平臺
vczh.Iskandar<vczh@163.com> 10:55:52
等你學會編程之后
vczh.Iskandar<vczh@163.com> 10:56:02
早就消失了
vczh.Konobuta(450635425) 10:54:05
用了原子指令
質量最大vczh粉(402740419) 10:54:07
這是百度的面試題,google才不面這個
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:54:08
質量最大vczh粉(402740419) 10:50:52
VCZH.粉絲數組[0](85126585) 10:50:26
你考慮這些和我的方式不太一樣,我覺得這個東西了解就行了,自己做是下下策
做事的方式 和考察、自我考察的方式是兩碼事
不然vczh大牛也不會做編譯器和GUI了,反正也沒人用 
受教了,擠時間還是多把這些東西實現一下
vczh一千號粉絲(327385942) 10:54:50
vczh一千號粉絲(327385942) 10:55:12
做acm題還是不錯的
Sean(123983971) 10:55:15
小矩形可以重疊嗎?
vczh.Konobuta(450635425) 10:55:16
實際上還是相當于加鎖,只是粒度更小
vczh.Konobuta(450635425) 10:55:32
就怕有的平臺不支持
vczh.Iskandar<vczh@163.com> 10:55:42
不支持CAS的平臺
vczh.Iskandar<vczh@163.com> 10:55:52
等你學會編程之后
vczh.Iskandar<vczh@163.com> 10:56:02
早就消失了
vczh.Konobuta(450635425) 10:56:40
萬一有呢?
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:56:43
vczh.Iskandar<vczh@163.com> 10:55:42
不支持CAS的平臺
等你學會編程之后
早就消失了
確實,我沒見過,除了學校C51單片機
裝配腦袋(2380479792) 10:56:50
連ARM都支持
vczh.Iskandar<vczh@163.com> 10:56:50
就是沒有
裝配腦袋(2380479792) 10:57:02
不支持沒法辦事
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:57:05
如果有,那么肯定是中斷來做時分的
vczh.Ismeow(65200296) 10:57:04
51這種平臺你會做什么搶占式Multiprogramming么……
裝配腦袋(2380479792) 10:57:07
顯卡都支持。。
vczh.Ismeow(65200296) 10:57:10
我相信不會吧
vczh.Konobuta(450635425) 10:57:24
好吧
vczh.Konobuta(450635425) 10:57:39
我也換成這個
vczh.Iskandar<vczh@163.com> 10:57:59
再說了,如果不用CAS,你是沒有任何辦法的
質量最大vczh粉(402740419) 10:58:25
不支持CAS的設備一般就是單核設備了吧
vczh.腦殘粉(50923132) 10:58:27
沒有CAS,同步只能
質量最大vczh粉(402740419) 10:58:42
單核設備 還是能保證單條指令原子性的吧
vczh.Ismeow(65200296) 10:58:52
不支持CAS的設備一般是不支持多任務的設備……
質量最大vczh粉(402740419) 10:59:03
用中斷做分時任務是OK的
vczh.Ismeow(65200296) 10:59:27
問題是就那點可憐的資源……
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:59:51
多核 多中斷
VCZH.粉絲數組[0]<errorcpp@qq.com> 10:59:55
就sb了
vczh.Ismeow(65200296) 10:59:56
你做個什么調度就爆了
VCZH.粉絲數組[0]<errorcpp@qq.com> 11:00:17
不過這樣SB的CPU估計沒人用
從未來?過(815330718) 11:00:33
沒有cas, 硬生生的 用不可屏蔽中斷+變量 造一個...
vczh.Ismeow(65200296) 11:00:41
嗯
從未來?過(815330718) 11:00:42
(逃
vczh.Ismeow(65200296) 11:00:54
NMI弄一個,不過這么弄就要硬件支持吧
vczh.Konobuta(450635425) 11:01:08
uczh.0xDEADBEEF(365128087) 11:01:24
vczh.Iskandar<vczh@163.com> 11:02:10
連cas都沒有的硬件
從未來?過(815330718) 11:02:16
只會寫代碼,不如去種田
http://www.oschina.net/news/38229/teach-kids-to-farm-not-code
vczh.Iskandar<vczh@163.com> 11:02:18
你想做多線程的事情
小老鼠(273245994) 11:02:19
http://slide.news.sina.com.cn/c/slide_1_2841_30492.html#p=1
vczh.Iskandar<vczh@163.com> 11:02:21
只能踩死
質量最大vczh粉(402740419) 11:05:35
vczh
質量最大vczh粉(402740419) 11:05:43
我今年6月份開始,要大規模做UI類的東西
vczh.Iskandar<vczh@163.com> 11:05:53
你不是早就做了嗎
質量最大vczh粉(402740419) 11:06:11
我什么時候大規模做過可商業化的UI…… 除了在百度
vczh.Konobuta(450635425) 11:06:21

vczh.Konobuta(450635425) 11:06:31
教我
vczh.Iskandar<vczh@163.com> 11:06:41
不是萌妹紙,滾!
vczh.Konobuta(450635425) 11:06:47
入群求節操(152606004) 11:06:50


教我
vczh.腦殘粉(50923132) 11:06:58
vczh.Iskandar<vczh@163.com> 11:06:41
不是萌妹紙,滾!
御虛舟北(314969051) 11:07:00
不是萌妹紙,滾!
質量最大vczh粉(402740419) 11:07:08
不是萌妹紙,滾!
vczh.Konobuta(450635425) 11:07:11
質量最大vczh粉(402740419) 11:07:12
話說回來
質量最大vczh粉(402740419) 11:07:22
GacUI到那時候能完善到滿足我的需求么= =
質量最大vczh粉(402740419) 11:07:30
不然的話,我是用Qt呢還是Qt呢還是Qt呢?
暫時的理解:
隊列如果限定插入只從head,彈出只從tail,那么只要滿足head != tail就是,一讀取一寫就是安全的。