D語言中的全域性變數與多執行緒單例

2022-09-12 03:00:13 字數 702 閱讀 8729

在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

testclass

}

在d語言中,這個麼也能執行,沒有錯誤,但是結果卻不是我們想要的,這是因為以上原因,這個單例會在每乙個執行緒中建立乙個,那就已經不是單例了,呵呵。應該叫做單執行緒單例。

需要真正的使用多執行緒單例,我們需要使用__gshared關鍵字。如下:

class

testclass

}

全域性變數與單例模式

昨天同事問到 單例模式和全域性變數有何區別?全域性變數可以建立多個例項,但單例模式只能建立乙個 每次得呼叫getinstance 之類的唯一方法得到 而全域性變數的class,你可以在任何包含它的地方例項化物件,a a,a b and so on 但對於單例模式,無論在哪 a a getinstan...

C語言中static全域性變數與普通的全域性變數的區別

static全域性變數與普通的全域性變數有什麼區別?static區域性變數和普通區域性變數有什麼區別?static函式與普通函式有什麼區別?全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方...

C語言中static全域性變數與普通的全域性變數區別

1.static全域性變數與普通的全域性變數有什麼區別 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多...