是否有一種使用同步方法創建重入鎖機制的方法?可以使用同步方法在Java中實現重入鎖定機制
由於同步的方法不會讓2個線程一起進入臨界區,我認爲這是不可能的。任何人都可以提供一些見解嗎?
假設我將重入屬性擴展爲Reader-Writer問題,其中多個讀者可以鎖定同一對象,但Writer鎖是獨佔的。
我們可以使用同步方法實現此功能嗎?
是否有一種使用同步方法創建重入鎖機制的方法?可以使用同步方法在Java中實現重入鎖定機制
由於同步的方法不會讓2個線程一起進入臨界區,我認爲這是不可能的。任何人都可以提供一些見解嗎?
假設我將重入屬性擴展爲Reader-Writer問題,其中多個讀者可以鎖定同一對象,但Writer鎖是獨佔的。
我們可以使用同步方法實現此功能嗎?
不知道我是否理解這個問題,但重入鎖是一個鎖,當您已經擁有它時可以獲得第二次鎖(而不是非重入鎖,它只會阻止那點)。
Java中的同步塊具有以下屬性:已經擁有鎖的線程可以輸入該塊。
如果沒有這個,就很難編寫正確的執行路徑,因爲你不可能有一個對象的同步方法調用另一個。
在下面的代碼
public class Foo {
public synchronized void bar() {
zoop();
}
public synchronized void zoop() {}
}
如果Thread
電話
Foo foo = new Foo();
foo.bar();
你有一個可重入鎖,因爲這Thread
擁有Foo
對象監視器,然後重新捕獲它時,它調用zoop()
內bar()
。
你不清楚你明白什麼是'重入'的實際含義。這意味着你可以重新獲得你已經擁有的鎖而不被阻塞。已具有重入屬性。
「重入」一詞實際上來自「重入」的含義,因爲在另一個「線程」正在處理的同時,另一個「線程」可以重新輸入該方法。當我們沒有談論並行/併發執行,而是單核多線程系統時,它實際上已經被使用了。 – Gray
我不認爲有任何特殊的需要一個同步的方法來調用另一個。事實上,如果沒有發生,這可能是一個好主意。 –
@ TomHawtin-tackline爲什麼? – EJP