-1
我正在尋找一個簡單的無鎖作業隊列,可以通用的方式跨平臺使用。無鎖作業隊列(多個讀/寫) - 請求複查
*沒有外部依賴關係,只有很少的調用接口,沒有特殊的編譯器技巧,可能會從編譯器到編譯器,最好只是頭文件。
要麼我吮吸谷歌搜索,或者這是不可用。 (它們不是相互排斥的,但你得到點)
我正在尋找一個簡單的無鎖作業隊列,可以通用的方式跨平臺使用。無鎖作業隊列(多個讀/寫) - 請求複查
*沒有外部依賴關係,只有很少的調用接口,沒有特殊的編譯器技巧,可能會從編譯器到編譯器,最好只是頭文件。
要麼我吮吸谷歌搜索,或者這是不可用。 (它們不是相互排斥的,但你得到點)
在推送功能,讓馬克兩點:
Line 1: start_.compare_exchange_strong(tmp, newnode);
Line 2: node_ptr prev_end = end_.exchange(newnode); // and set next pointer
現在,考慮兩個線程調用推送:
start end a.next b.next
Begin null null - -
TA.push(a) - 1 a null null null
TB.push(b) - 1 a null null null
TB.push(b) - 2 a b null null
TA.push(a) - 2 a a null a
正如你可以看到,b在列表中丟失。
它看起來像這是一個空列表是唯一的,我猜接下來的2行應該分配end_開始_-> next如果它是空的,每當prev_end是一個nullptr – Arjan
這個問題似乎是題外話題,因爲它是關於代碼審查。它應該問http://codereview.stackexchange.com/ – pmr
正如@Edward也建議,這是現在可用codereview http://codereview.stackexchange.com/questions/46722/lock-free-job-隊列無大小限制多讀寫 – Arjan
此外,題外話題:標題和問題不匹配。標題要求代碼審查(無題,屬於codereview.stackexchange.com),該問題要求實現(脫離主題,要求圖書館等)。 – stefan