2016-03-29 35 views
2

我想爲自己說清楚什麼是「互鎖」的意思。我閱讀以下內容:「互鎖函數提供了一種簡單的機制,用於同步對多線程共享的變量的訪問,並以原子方式對變量執行操作。」什麼操作被稱爲互鎖?

那麼下面的函數可以被稱爲互鎖嗎?

#include <QtCore> 
#include <QAtomicPointer> 

QAtomicInt i; 

void interlockedMultiply(int factor) 
{ 
    int oldValue; 
    do 
    { 
     oldValue = i; 
    } while (!i.testAndSetOrdered(oldValue, oldValue * factor)); 
} 


long long x; 
QReadWriteLock lock; 

void interlockedAdd(long long y) 
{ 
    lock.lockForWrite(); 
    x += y; 
    lock.unlock(); 
} 

如果不是,請建議一個專用名稱。

+1

在我的經驗中,「互鎖」並不意味着任何過於具體的東西(儘管我可能是錯的)。它更多的是應用於包裝原子基元的實用函數的標籤。所以是的,我認爲將這些函數標記爲「互鎖」是可以的,儘管在這樣的函數中使用鎖可能令人驚訝。 – Cameron

回答

1

聯鎖意味着併發操作將產生預期結果。即如果您執行五次互鎖加法,則該變量將增加五次。不多,也不少。

+0

上述兩項功能均遵循此規則。那麼我們可以稱它們是互鎖的嗎?我特別好奇那些有關鍵部分的人,因爲互鎖操作經常被用作阻止操作(即鎖定)的替代方法。 – mentalmushroom

+0

即使是原子操作也可以使用鎖。 – knivil

0

將這些函數命名爲這樣並不具有欺騙性,但您仍應記錄它們的語義,最好使用某種形式的支持併發原語的描述。

相關問題