2009-10-02 78 views
0

我正在使用GUIDs作爲大多數數據庫表中的鍵的系統。 GUID使用UuidCreateSequential創建,以便更好地處理數據庫索引。UuidCreateSequential和p/invoke調用的線程安全性一般

C++的語法,根據http://msdn.microsoft.com/en-us/library/aa379322(VS.85).aspx

RPC_STATUS RPC_ENTRY UuidCreateSequential(
    UUID __RPC_FAR *Uuid 
); 

P/invoke.net提出以下簽名:

[DllImport("rpcrt4.dll", SetLastError=true)] 
static extern int UuidCreateSequential(out Guid guid); 

的問題是 - 我怎麼能知道這種方法是否安全調用從幾個線程同時?初步測試表明這可能是安全的,但我還沒有在MSDN或Google上找到任何有關此信息的重要信息。是否有任何有關調用Windows API的標準約定,我可以依賴?

回答

1

假設大多數Windows API是線程安全的,這通常是安全的。

全球唯一的ID應該可以隨時從系統上的任何應用程序創建。因此我會說線程安全是GUID生成器的一個必需特性。 RFC 4122描述了一種用於生成GUID的方法,它應該與Windows的實際操作相當接近。請注意,它提到了獲取全局鎖定的必要性,以確保創建GUID的同時調用無法獲得相同的值。