日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

linux 无锁队列覆盖问题,无锁队列杂谈

發(fā)布時(shí)間:2025/6/15 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 无锁队列覆盖问题,无锁队列杂谈 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

質(zhì)量最大vczh粉(402740419) 10:13:17

nobody(1575393351)? 10:10:09

無(wú)鎖隊(duì)列,怎么可能

質(zhì)量最大vczh粉(402740419) 10:13:23

用link做,輕輕松松

nobody(1575393351) 10:13:40

多個(gè)線程同時(shí)從隊(duì)列里面取,怎么可能不加鎖。。

uczh.0xDEADBEEF(365128087) 10:13:44

他已經(jīng)發(fā)請(qǐng)求了

vczh四號(hào)粉絲(342775210) 10:13:51

可以不加鎖

質(zhì)量最大vczh粉(402740419) 10:13:51

用link做,真心不用加鎖

vczh四號(hào)粉絲(342775210) 10:13:55

不過(guò)必須用cas

質(zhì)量最大vczh粉(402740419) 10:14:03

CAS是啥

vczh四號(hào)粉絲(342775210) 10:14:06

否則做不了多線程的并發(fā)

nobody(1575393351) 10:14:13

link是什么東西

質(zhì)量最大vczh粉(402740419) 10:30:26

陳梓瀚? 10:27:16

用interlocked compare exchange

當(dāng)tail == null就換一個(gè)new link進(jìn)去

這樣偏麻煩

vczh四號(hào)粉絲(342775210) 10:30:28

會(huì)把問(wèn)題復(fù)雜化

質(zhì)量最大vczh粉(402740419) 10:30:29

有簡(jiǎn)單的辦法

uczh.0xDEADBEEF(365128087) 10:30:30

但性能很好的

質(zhì)量最大vczh粉(402740419) 10:30:43

類似ngxqueue的辦法,保證鏈表里始終有一個(gè)結(jié)點(diǎn)

質(zhì)量最大vczh粉(402740419) 10:30:49

這樣可以避免很多麻煩

uczh.0xDEADBEEF(365128087) 10:31:03

質(zhì)量最大vczh粉(402740419) 10:31:07

只有構(gòu)造和析構(gòu)的時(shí)候 多線程訪問(wèn)會(huì)出問(wèn)題,但這時(shí)候一般又不會(huì)多線程訪問(wèn)

vczh.Iskandar 10:31:17

就算如此你也要對(duì)tail->next == null的時(shí)候做判斷嘛

VCZH.粉絲數(shù)組[0] 10:31:22

質(zhì)量最大vczh粉(402740419)? 10:31:07

只有構(gòu)造和析構(gòu)的時(shí)候 多線程訪問(wèn)會(huì)出問(wèn)題,但這時(shí)候一般又不會(huì)多線程訪問(wèn)

不要做任何假設(shè)

vczh.Iskandar 10:31:26

這樣才能避免兩個(gè)線程同時(shí)push

質(zhì)量最大vczh粉(402740419) 10:31:48

VCZH.粉絲數(shù)組[0](85126585)? 10:31:22

質(zhì)量最大vczh粉(402740419)? 10:31:07

只有構(gòu)造和析構(gòu)的時(shí)候 多線程訪問(wèn)會(huì)出問(wèn)題,但這時(shí)候一般又不會(huì)多線程訪問(wèn)

不要做任何假設(shè)

不是假設(shè),構(gòu)造還沒(méi)完成的時(shí)候就把對(duì)象傳給多個(gè)線程從設(shè)計(jì)上來(lái)說(shuō)就是有毛病的

質(zhì)量最大vczh粉(402740419) 10:31:59

析構(gòu)也類似

質(zhì)量最大vczh粉(402740419) 10:32:14

性質(zhì)上和你在別的線程進(jìn)行了野指針操作沒(méi)有區(qū)別

VCZH.粉絲數(shù)組[0] 10:32:21

ooseven(147340642) 10:32:31

這樣設(shè)計(jì)的話,對(duì)象的生命周期很難控制

VCZH.粉絲數(shù)組[0] 10:32:58

reference counting嘛

質(zhì)量最大vczh粉(402740419) 10:33:00

肯定是構(gòu)造完了,才丟給shared_ptr或者別的什么東西,然后才會(huì)多線程考慮持有這個(gè)對(duì)象

VCZH.粉絲數(shù)組[0] 10:33:02

現(xiàn)在流行

vczh.Iskandar 10:33:08

析構(gòu)的時(shí)候

vczh.Iskandar 10:33:13

肯定是所有shared_ptr都完蛋了

vczh.Iskandar 10:33:17

所以這個(gè)時(shí)候也不會(huì)有人訪問(wèn)了

質(zhì)量最大vczh粉(402740419) 10:33:36

陳梓瀚? 10:31:17

就算如此你也要對(duì)tail->next == null的時(shí)候做判斷嘛

嗯嗯,compareandswap就是這里啊

vczh四號(hào)粉絲(342775210) 10:34:23

不僅僅是null的判斷吧

VCZH.粉絲數(shù)組[0] 10:34:33

循環(huán)隊(duì)列里邊

VCZH.粉絲數(shù)組[0] 10:34:44

tail->next == head

VCZH.粉絲數(shù)組[0] 10:34:50

貌似這樣的

質(zhì)量最大vczh粉(402740419) 10:34:56

循環(huán)隊(duì)列?

VCZH.粉絲數(shù)組[0] 10:35:04

ring

VCZH.粉絲數(shù)組[0] 10:35:06

buffer

質(zhì)量最大vczh粉(402740419) 10:35:15

ringbuffer是另一個(gè)概念= =

VCZH.粉絲數(shù)組[0] 10:35:24

囧,我錯(cuò)了

質(zhì)量最大vczh粉(402740419) 10:35:41

剛才那個(gè)是最簡(jiǎn)單的,每個(gè)節(jié)點(diǎn)只能存一個(gè)pointer或者其它相同大小的東西

vczh四號(hào)粉絲(342775210) 10:35:43

質(zhì)量最大vczh粉(402740419) 10:37:16

= = 堆棧這么做是找死啊

質(zhì)量最大vczh粉(402740419) 10:37:19

就是算法有問(wèn)題

vczh.Iskandar 10:37:50

我覺(jué)得這個(gè)例子有問(wèn)題

vczh.Iskandar 10:37:55

你每一次push新數(shù)據(jù)進(jìn)去的時(shí)候

vczh四號(hào)粉絲(342775210) 10:37:57

你的系統(tǒng)先把10Wtps過(guò)了,再說(shuō)并發(fā)

vczh.Iskandar 10:38:04

都不能重用節(jié)點(diǎn)

vczh.Iskandar 10:38:06

都必須new一個(gè)新的

質(zhì)量最大vczh粉(402740419) 10:38:45

vczh四號(hào)粉絲(342775210)? 10:37:57

你的系統(tǒng)先把10Wtps過(guò)了,再說(shuō)并發(fā)

噗,我的服務(wù)端是單進(jìn)程多線程模型

質(zhì)量最大vczh粉(402740419) 10:38:53

客戶端才在搞多線程

質(zhì)量最大vczh粉(402740419) 10:39:04

說(shuō)錯(cuò)了

質(zhì)量最大vczh粉(402740419) 10:39:08

服務(wù)端是單線程多金正

質(zhì)量最大vczh粉(402740419) 10:41:02

我的引擎里當(dāng)初做一個(gè)類似tbb那種task式的并行框架(或者類似boost.asio)

質(zhì)量最大vczh粉(402740419) 10:41:20

因?yàn)橼s著出工,直接拿一個(gè)lockfree的list就上了

小老鼠(273245994) 10:41:25

沈陽(yáng)發(fā)生爆炸了

質(zhì)量最大vczh粉(402740419) 10:41:38

結(jié)果性能還可以

vczh.Iskandar 10:41:43

什么爆炸

VCZH.粉絲數(shù)組[0] 10:42:35

因?yàn)橼s著出工,直接拿一個(gè)lockfree的list就上了

自己寫的?

質(zhì)量最大vczh粉(402740419) 10:42:51

很久很久很久以前寫的

質(zhì)量最大vczh粉(402740419) 10:43:05

然后寫這個(gè)的時(shí)候不知道m(xù)em barrier

質(zhì)量最大vczh粉(402740419) 10:43:11

加到引擎里的時(shí)候 加了下barrier

小老鼠(273245994) 10:43:21

9時(shí),太原街地下通道

質(zhì)量最大vczh粉(402740419) 10:43:34

當(dāng)時(shí)還問(wèn)了這兩位將近一天……

小老鼠(273245994) 10:43:46

附近1公里都有震感

小老鼠(273245994) 10:43:57

你說(shuō)這次會(huì)不會(huì)還是死35人.

VCZH.粉絲數(shù)組[0] 10:44:27

牛逼

裝配腦袋(2380479792) 10:44:37

兩·會(huì)就不讓他們好好開(kāi)

小老鼠(273245994) 10:43:57

你說(shuō)這次會(huì)不會(huì)還是死35人.

VCZH.粉絲數(shù)組[0] 10:44:27

牛逼

裝配腦袋(2380479792) 10:44:37

兩·會(huì)就不讓他們好好開(kāi)

VCZH.粉絲數(shù)組[0] 10:44:40

我遇到這個(gè)第一想法是開(kāi)源的弄一個(gè)來(lái)

御虛舟北(314969051) 10:44:41

又黑人

質(zhì)量最大vczh粉(402740419) 10:45:32

VCZH.粉絲數(shù)組[0](85126585)? 10:44:40

我遇到這個(gè)第一想法是開(kāi)源的弄一個(gè)來(lái)

假設(shè)需要一套整塊功能,肯定用開(kāi)源的

質(zhì)量最大vczh粉(402740419) 10:45:46

如果只需求一個(gè)點(diǎn)…… 對(duì)我們搞移動(dòng)的來(lái)說(shuō),port成本太高了……

質(zhì)量最大vczh粉(402740419) 10:46:00

不過(guò)本質(zhì)上來(lái)說(shuō)這個(gè)還是幾乎算是用開(kāi)源的

質(zhì)量最大vczh粉(402740419) 10:46:03

只是我人肉翻譯了下而已

VCZH.粉絲數(shù)組[0] 10:46:35

所以昨天被問(wèn)到這個(gè)問(wèn)題,我很反感那個(gè)家伙,,,

VCZH.粉絲數(shù)組[0] 10:46:44

尼瑪問(wèn)這就是問(wèn)我看過(guò)類似的帖子沒(méi),,,

質(zhì)量最大vczh粉(402740419) 10:47:16

帖子?

vczh一千號(hào)粉絲(327385942) 10:47:29

VCZH.粉絲數(shù)組[0] 10:47:41

就是說(shuō)我看過(guò)討論類似的論文沒(méi)有

VCZH.粉絲數(shù)組[0] 10:47:47

看過(guò)就能說(shuō)兩句

VCZH.粉絲數(shù)組[0] 10:47:58

沒(méi)看過(guò),面試那一點(diǎn)時(shí)間能想出來(lái)

VCZH.粉絲數(shù)組[0] 10:48:01

還見(jiàn)鬼了

質(zhì)量最大vczh粉(402740419) 10:48:17

??

質(zhì)量最大vczh粉(402740419) 10:48:24

我曾經(jīng)面試一個(gè) 剛畢業(yè)的小伙子,也談不上多優(yōu)秀

質(zhì)量最大vczh粉(402740419) 10:48:32

我面試就問(wèn)的lock-free的隊(duì)列

御虛舟北(314969051) 10:48:33

剛畢業(yè)的小伙子

質(zhì)量最大vczh粉(402740419) 10:48:38

還不是linked-list

VCZH.粉絲數(shù)組[0] 10:48:44

自己想出來(lái)了?

質(zhì)量最大vczh粉(402740419) 10:48:44

是deque的

質(zhì)量最大vczh粉(402740419) 10:49:03

自己肯定想不出來(lái),但已經(jīng)摸到邊了啊,我稍微誘導(dǎo)了一下

質(zhì)量最大vczh粉(402740419) 10:49:05

就出來(lái)了

vczh.Isotope(75497789) 10:49:27

菊苣們,這里能問(wèn)算法題不?

質(zhì)量最大vczh粉(402740419) 10:49:38

知道基本概念了這就是很直觀的東西,需要上升到論文層面么……

質(zhì)量最大vczh粉(402740419) 10:49:45

復(fù)雜一點(diǎn)的數(shù)據(jù)結(jié)構(gòu)可能需要

質(zhì)量最大vczh粉(402740419) 10:49:48

至少隊(duì)列不需要啊= =

質(zhì)量最大vczh粉(402740419) 10:50:18

啥算法題?工作需要還是自己瞎折騰

VCZH.粉絲數(shù)組[0] 10:50:25

你考慮這些和我的方式不太一樣,我覺(jué)得這個(gè)東西了解就行了,自己做是下下策

我是不是得改改了?

vczh.Isotope(75497789) 10:50:44

用1*2的矩形去覆蓋m*n的矩形(m*n是偶數(shù)),問(wèn)一共有多少種方法

質(zhì)量最大vczh粉(402740419) 10:50:52

VCZH.粉絲數(shù)組[0](85126585)? 10:50:26

你考慮這些和我的方式不太一樣,我覺(jué)得這個(gè)東西了解就行了,自己做是下下策

做事的方式 和考察、自我考察的方式是兩碼事

質(zhì)量最大vczh粉(402740419) 10:51:31

不然vczh大牛也不會(huì)做編譯器和GUI了,反正也沒(méi)人用

vczh.Iskandar 10:51:51

小老鼠(273245994) 10:52:15

內(nèi)傷了

質(zhì)量最大vczh粉(402740419) 10:52:38

vczh.Isotope(75497789)? 10:50:44

用1*2的矩形去覆蓋m*n的矩形(m*n是偶數(shù)),問(wèn)一共有多少種方法

ACM題?滾邊去。我會(huì),就是不告訴你

質(zhì)量最大vczh粉(402740419) 10:52:40

ACM毒害人

vczh.Iskandar 10:52:54

做ACM踢掉(逃

質(zhì)量最大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 10:53:14

這些就是

vczh.Isotope(75497789) 10:53:17

好像是MS面試題

vczh.Iskandar 10:53:21

這個(gè)群使用來(lái)討論奇技淫巧的

vczh.Iskandar 10:53:27

這是google的面試題,M$才不面這個(gè)

vczh.Konobuta(450635425) 10:53:48

看了下

vczh.Konobuta(450635425) 10:54:05

用了原子指令

質(zhì)量最大vczh粉(402740419) 10:54:07

這是百度的面試題,google才不面這個(gè)

VCZH.粉絲數(shù)組[0] 10:54:08

質(zhì)量最大vczh粉(402740419)? 10:50:52

VCZH.粉絲數(shù)組[0](85126585)? 10:50:26

你考慮這些和我的方式不太一樣,我覺(jué)得這個(gè)東西了解就行了,自己做是下下策

做事的方式 和考察、自我考察的方式是兩碼事

不然vczh大牛也不會(huì)做編譯器和GUI了,反正也沒(méi)人用

受教了,擠時(shí)間還是多把這些東西實(shí)現(xiàn)一下

vczh一千號(hào)粉絲(327385942) 10:54:50

vczh一千號(hào)粉絲(327385942) 10:55:12

做acm題還是不錯(cuò)的

Sean(123983971) 10:55:15

小矩形可以重疊嗎?

vczh.Konobuta(450635425) 10:55:16

實(shí)際上還是相當(dāng)于加鎖,只是粒度更小

vczh.Konobuta(450635425) 10:55:32

就怕有的平臺(tái)不支持

vczh.Iskandar 10:55:42

不支持CAS的平臺(tái)

vczh.Iskandar 10:55:52

等你學(xué)會(huì)編程之后

vczh.Iskandar 10:56:02

早就消失了

vczh.Konobuta(450635425) 10:54:05

用了原子指令

質(zhì)量最大vczh粉(402740419) 10:54:07

這是百度的面試題,google才不面這個(gè)

VCZH.粉絲數(shù)組[0] 10:54:08

質(zhì)量最大vczh粉(402740419)? 10:50:52

VCZH.粉絲數(shù)組[0](85126585)? 10:50:26

你考慮這些和我的方式不太一樣,我覺(jué)得這個(gè)東西了解就行了,自己做是下下策

做事的方式 和考察、自我考察的方式是兩碼事

不然vczh大牛也不會(huì)做編譯器和GUI了,反正也沒(méi)人用

受教了,擠時(shí)間還是多把這些東西實(shí)現(xiàn)一下

vczh一千號(hào)粉絲(327385942) 10:54:50

vczh一千號(hào)粉絲(327385942) 10:55:12

做acm題還是不錯(cuò)的

Sean(123983971) 10:55:15

小矩形可以重疊嗎?

vczh.Konobuta(450635425) 10:55:16

實(shí)際上還是相當(dāng)于加鎖,只是粒度更小

vczh.Konobuta(450635425) 10:55:32

就怕有的平臺(tái)不支持

vczh.Iskandar 10:55:42

不支持CAS的平臺(tái)

vczh.Iskandar 10:55:52

等你學(xué)會(huì)編程之后

vczh.Iskandar 10:56:02

早就消失了

vczh.Konobuta(450635425) 10:56:40

萬(wàn)一有呢?

VCZH.粉絲數(shù)組[0] 10:56:43

vczh.Iskandar? 10:55:42

不支持CAS的平臺(tái)

等你學(xué)會(huì)編程之后

早就消失了

確實(shí),我沒(méi)見(jiàn)過(guò),除了學(xué)校C51單片機(jī)

裝配腦袋(2380479792) 10:56:50

連ARM都支持

vczh.Iskandar 10:56:50

就是沒(méi)有

裝配腦袋(2380479792) 10:57:02

不支持沒(méi)法辦事

VCZH.粉絲數(shù)組[0] 10:57:05

如果有,那么肯定是中斷來(lái)做時(shí)分的

vczh.Ismeow(65200296) 10:57:04

51這種平臺(tái)你會(huì)做什么搶占式Multiprogramming么……

裝配腦袋(2380479792) 10:57:07

顯卡都支持。。

vczh.Ismeow(65200296) 10:57:10

我相信不會(huì)吧

vczh.Konobuta(450635425) 10:57:24

好吧

vczh.Konobuta(450635425) 10:57:39

我也換成這個(gè)

vczh.Iskandar 10:57:59

再說(shuō)了,如果不用CAS,你是沒(méi)有任何辦法的

質(zhì)量最大vczh粉(402740419) 10:58:25

不支持CAS的設(shè)備一般就是單核設(shè)備了吧

vczh.腦殘粉(50923132) 10:58:27

沒(méi)有CAS,同步只能

質(zhì)量最大vczh粉(402740419) 10:58:42

單核設(shè)備 還是能保證單條指令原子性的吧

vczh.Ismeow(65200296) 10:58:52

不支持CAS的設(shè)備一般是不支持多任務(wù)的設(shè)備……

質(zhì)量最大vczh粉(402740419) 10:59:03

用中斷做分時(shí)任務(wù)是OK的

vczh.Ismeow(65200296) 10:59:27

問(wèn)題是就那點(diǎn)可憐的資源……

VCZH.粉絲數(shù)組[0] 10:59:51

多核 多中斷

VCZH.粉絲數(shù)組[0] 10:59:55

就sb了

vczh.Ismeow(65200296) 10:59:56

你做個(gè)什么調(diào)度就爆了

VCZH.粉絲數(shù)組[0] 11:00:17

不過(guò)這樣SB的CPU估計(jì)沒(méi)人用

從未來(lái)??過(guò)?(815330718) 11:00:33

沒(méi)有cas, 硬生生的 用不可屏蔽中斷+變量 造一個(gè)...

vczh.Ismeow(65200296) 11:00:41

從未來(lái)??過(guò)?(815330718) 11:00:42

(逃

vczh.Ismeow(65200296) 11:00:54

NMI弄一個(gè),不過(guò)這么弄就要硬件支持吧

vczh.Konobuta(450635425) 11:01:08

uczh.0xDEADBEEF(365128087) 11:01:24

vczh.Iskandar 11:02:10

連cas都沒(méi)有的硬件

從未來(lái)??過(guò)?(815330718) 11:02:16

vczh.Iskandar 11:02:18

你想做多線程的事情

小老鼠(273245994) 11:02:19

vczh.Iskandar 11:02:21

只能踩死

質(zhì)量最大vczh粉(402740419) 11:05:35

vczh

質(zhì)量最大vczh粉(402740419) 11:05:43

我今年6月份開(kāi)始,要大規(guī)模做UI類的東西

vczh.Iskandar 11:05:53

你不是早就做了嗎

質(zhì)量最大vczh粉(402740419) 11:06:11

我什么時(shí)候大規(guī)模做過(guò)可商業(yè)化的UI…… 除了在百度

vczh.Konobuta(450635425) 11:06:21

vczh.Konobuta(450635425) 11:06:31

教我

vczh.Iskandar 11:06:41

不是萌妹紙,滾!

vczh.Konobuta(450635425) 11:06:47

入群求節(jié)操(152606004) 11:06:50

教我

vczh.腦殘粉(50923132) 11:06:58

vczh.Iskandar? 11:06:41

不是萌妹紙,滾!

御虛舟北(314969051) 11:07:00

不是萌妹紙,滾!

質(zhì)量最大vczh粉(402740419) 11:07:08

不是萌妹紙,滾!

vczh.Konobuta(450635425) 11:07:11

質(zhì)量最大vczh粉(402740419) 11:07:12

話說(shuō)回來(lái)

質(zhì)量最大vczh粉(402740419) 11:07:22

GacUI到那時(shí)候能完善到滿足我的需求么= =

質(zhì)量最大vczh粉(402740419) 11:07:30

不然的話,我是用Qt呢還是Qt呢還是Qt呢?

暫時(shí)的理解:

隊(duì)列如果限定插入只從head,彈出只從tail,那么只要滿足head != tail就是,一讀取一寫就是安全的。

總結(jié)

以上是生活随笔為你收集整理的linux 无锁队列覆盖问题,无锁队列杂谈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。