我需要一個數據結構實現這些有點不尋常(據我所知)要求:中斷安全組掃描
- 支持的操作是插入(套,件),刪除(套,條)和FORALL(套,操作)
- 插入和刪除是罕見的操作。該集合通常只包含一個項目。
- 在C中實現必須是可行的;特別是,你沒有垃圾收集。
- ForAll必須安全,可以從異步信號處理程序執行,其調用可能會中斷Insert或Delete。
當然,最後的要求是殺手。我有一個玩具實現,它會在全局鏈表上引發一個全局鎖,但是如果信號處理程序中斷了一個關鍵部分,那麼就會發生死鎖。我知道在信號處理程序中執行任意代碼的所有問題;爲了解決這個問題,我們着重討論如何使ForAll崩潰和死鎖安全,因爲它可能會中斷Insert或刪除)。
謝謝,但我希望得到更具體和有針對性的答案。我已經閱讀了其中的幾篇文章。他們專注於針對*對方進行插入和刪除無鎖操作,並忽略ForAll。我完全可以很好地將Insert和Delete鎖在一起(事實上,做任何事情似乎都是不必要的複雜性,因爲列表非常短),但這對ForAll沒有幫助。 – zwol
我想我可能會錯過一些東西,但它看起來像http://reference.kfupm.edu.sa/content/l/o/lock_free_linked_lists_using_compare_and_3368.pdf中的論文很有效地解決了遍歷問題。 –
我接受這個,因爲它在一般情況下是正確的答案,但爲了記錄,我最終做的是在插入和刪除操作中調用'sigprocmask',以防止它們與信號處理程序競爭。 – zwol