[英]Is a method with no linearization points always not linearizable?
如果您可以肯定地證明某方法沒有線性化點,是否一定意味着該方法不可線性化? 另外,作為一個子問題,如何證明方法沒有線性化點?
為了建立上述答案, 可以將一種方法描述為可線性化的。 正如djoker提到的書中所提到的: http ://www.amazon.com/dp/0123705916/?tag=stackoverfl08-20
在第69頁的練習32中,我們看到
應當注意,enq()確實是一種方法,被描述為可能線性化/不可線性化。
證明存在線性化點歸結為尋找是否存在可能破壞線性化的示例。 如果您假設某個方法中的各種讀/寫存儲操作是可線性化的,然后通過矛盾證明這種假設導致了某些不可線性化的情況,則可以聲明前面提到的讀/寫操作不是有效的線性化點。
以下面的enq()/ deq()方法為例,假設它們是標准隊列實現的一部分,其中頭/尾指針為tha,后備數組為“ arr”:
public terribleQueue(){
arr = new T[10];
tail = 0;
head = 0;
}
void enq(T x){
int slot = tail;
arr[slot] = x;
tail = tail + 1;
}
T deq(){
if( head == tail ) throw new EmptyQueueException();
T temp = arr[head];
head = head + 1;
return temp;
}
在這個可怕的實現中,例如,我們可以輕松地證明enq的第一行不是有效的線性化點,方法是假定它是線性化點,然后找到一個顯示其他示例,如下所示:
以示例兩個線程A和B以及示例歷史記錄為例:
A: enq( 1 )
A: slot = 0
B: enq( 2 )
B: slot = 0
(A和B現在已經超過了它們的線性化點,因此我們不允許重新排序它們以適應我們的歷史)
A: arr[0] = 1
B: arr[0] = 2
A: tail = 1
B: tail = 2
C: deq()
C: temp = arr[0] = 2
C: head = 1
C: return 2
現在我們看到,由於我們選擇了線性化點(固定了A和B的順序),因此無法執行線性化此執行,因為無論將C的deq置於何處,都無法使其返回1。
答案很長,但是我希望這會有所幫助
If you can definitely prove that a method has no linearization points, does it necessarily mean that that method is not linearizable?
首先,線性化不是方法的屬性,而是執行序列的屬性。
how can you prove that a method has no linearizatioon points?
是否能夠找到該方法的線性化點取決於執行順序。
例如,對於FIFO隊列中的線程A,我們具有以下序列。 t1,t2,t3是時間間隔。
A.enq(1)A.enq(2)A.deq(1)
t1 t2 t3
對於前兩個enq方法,我們可以分別選擇線性化點(lp)作為時間間隔t1和t2中的任何點,對於deq可以選擇t3中的任何點。 對於這些方法,我們選擇的要點是lp。
現在,考慮一個錯誤的實現
A.enq(1)A.enq(2)A.deq(2)
t1 t2 t3
Linerizability允許lp遵守實時訂購。 因此,這些方法的lp應遵循時間順序,即t1 <t2 <t3。 但是,由於我們的實現不正確,因此我們無法明確地做到這一點。 因此,我們無法找到方法A.deq(2)的線性化點,進而無法找到我們的序列。 太不能襯里了。
希望這對您有所幫助,如果您需要了解更多信息,可以閱讀本書: http : //www.amazon.com/Art-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916
這個答案是基於我第一次閱讀有關Wikipedia的線性化,並試圖通過先發生后關聯將其映射到我對內存一致性的現有理解。 因此我可能會誤解這個概念。
如果您可以肯定地證明某方法沒有線性化點,是否一定意味着該方法不可線性化?
有可能發生這樣的情況:共享的可變狀態由多個線程同時操作,而沒有任何同步或可見性輔助,並且仍然保持所有不變量而沒有損壞的風險。
但是,這些情況很少見。
如何證明方法沒有線性化點?
據我了解線性化點,在這里我可能是錯的,它們是在線程之間建立關系之前發生的地方。 如果一個方法(依次遞歸調用的每個方法)沒有建立這樣的關系,那么我會斷言它沒有線性化點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.