[英]Is a Common Lisp bordeaux-threads lock equivalent to Java synchronization?
我來自Java背景,試圖圍繞一些使用with-recursive-lock-held
常見Lisp代碼。 現在我在大學學習計算機科學操作系統 - 所以我在理論層面熟悉線程鎖的概念。 我的問題更多是在實際結束。
假設我們有以下Common Lisp代碼 :
(progn
(defun make-recursive-lock (&optional name)
(sb-thread:make-mutex :name (or name "printv")))
(defmacro with-recursive-lock-held ((place) &body body)
`(sb-thread:with-recursive-lock (,place)
,@body)))
對我來說,這似乎打開並鎖定操作系統線程級別。
如果我嘗試用Java表達這個想法(包圍我的頭腦) - 我會得到類似的東西:
public class SyncronizedExample {
private long protectedLong = 0;
private Object sync1 = new Object();
public void inc1() {
synchronized(sync1) {
protectedLong++;
}
}
}
(假設我正在使用'老派'Java 同步 ,而不是來自java.util.concurrent.*
的更新的 鎖 java.util.concurrent.*
- 跟我一起來 - 我試圖讓事情變得盡可能簡單)。
(我還假設Common Lisp示例是一個宏,Java示例只是一個圍繞它的同步的數據結構,並且這些不能直接比較。這部分是因為Java語言中的宏是不可能的,但是也因為我認為你是一個聰明的讀者,可以看看這些想法,而不是語法。)
我的問題是: Common Lisp bordeaux-threads鎖是否等同於Java同步?
在以下方面,是的:
在以下方面,可能:
在以下方面,沒有:
SyncronizedExample
(原文如此)使用了一個鎖定持有者。 使用類變量會使示例更相似。 在旁邊:
&optional (name "printv")
為可選參數提供默認值。 progn
。 bordeaux-threads
(可從Quicklisp獲得)作為低級線程代碼的可移植包裝器。 make-mutex
和with-recursive-lock
中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.