在d語言中的全域性變數與其它語言有著一定的區別,d語言中的全部變數是分配在每乙個執行緒中的,也就是說兩個不同的執行緒訪問到的全域性變數是兩個不同的資料。這是乙個很神奇的事情,來看乙個例子:
import std.stdio;來看看執行結果是什麼樣子:import core.thread;
import std.concurrency;
int temp = 0
;int main(string
ar**)
});temp = 1
;
while(true
)
}
執行的結果上可以看出:
1. 兩個執行緒中對temp沒有內容覆蓋問題
2. 兩個執行緒temp變數的位址不同
也就是說這乙個全部量變temp在不同的執行緒中卻是不同的變數,這會有乙個問題,那就是單例, 在其它程式中使用單例我們乙個這麼寫:
class在d語言中,這個麼也能執行,沒有錯誤,但是結果卻不是我們想要的,這是因為以上原因,這個單例會在每乙個執行緒中建立乙個,那就已經不是單例了,呵呵。應該叫做單執行緒單例。testclass
}
需要真正的使用多執行緒單例,我們需要使用__gshared關鍵字。如下:
classtestclass
}
全域性變數與單例模式
昨天同事問到 單例模式和全域性變數有何區別?全域性變數可以建立多個例項,但單例模式只能建立乙個 每次得呼叫getinstance 之類的唯一方法得到 而全域性變數的class,你可以在任何包含它的地方例項化物件,a a,a b and so on 但對於單例模式,無論在哪 a a getinstan...
C語言中static全域性變數與普通的全域性變數的區別
static全域性變數與普通的全域性變數有什麼區別?static區域性變數和普通區域性變數有什麼區別?static函式與普通函式有什麼區別?全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方...
C語言中static全域性變數與普通的全域性變數區別
1.static全域性變數與普通的全域性變數有什麼區別 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多...