我正在使用一个在大多数数据库表中使用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调用的标准约定?
答案 0 :(得分:1)
通常可以安全地假设大多数Windows API都是线程安全的。
应该能够随时从系统上的任何应用程序创建全局唯一ID。因此,我认为线程安全是GUID生成器的必需功能。 RFC 4122描述了一种生成GUID的方法,该方法应该与Windows实际上非常接近。请注意,它提到获取全局锁定,以确保同时调用创建GUID无法获得相同的值。