一般来说,UuidCreateSequential和p / invoke调用的线程安全性

时间:2009-10-02 06:14:12

标签: .net pinvoke thread-safety guid

我正在使用一个在大多数数据库表中使用GUID作为键的系统。 guid是使用 UuidCreateSequential 创建的,以便对数据库索引很好。

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 个答案:

答案 0 :(得分:1)

通常可以安全地假设大多数Windows API都是线程安全的。

应该能够随时从系统上的任何应用程序创建全局唯一ID。因此,我认为线程安全是GUID生成器的必需功能。 RFC 4122描述了一种生成GUID的方法,该方法应该与Windows实际上非常接近。请注意,它提到获取全局锁定,以确保同时调用创建GUID无法获得相同的值。