Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 同时从不同的计算机调用CreateDirectory或CreateFile时会发生什么情况?_C++_Windows_Winapi - Fatal编程技术网

C++ 同时从不同的计算机调用CreateDirectory或CreateFile时会发生什么情况?

C++ 同时从不同的计算机调用CreateDirectory或CreateFile时会发生什么情况?,c++,windows,winapi,C++,Windows,Winapi,我想使用文件的临时目录作为需要在远程目录中读写的多个应用程序(来自多台计算机)的锁,但在文档中没有解决这个问题。有人知道同时打两个电话会发生什么吗 注意:我知道使用数据库是最好的,但在我的情况下,这是不可能的。当您从不同的机器通过相同的目录名调用时,只有一个调用会成功。如果调用的是实际生成目录的函数,则API函数将仅返回TRUE。拥有该文件系统的机器上的操作系统使该进程原子化 但是,在对CreateDirectory的两次调用之间,没有什么可以阻止另一个处理进入并删除目录。因此,虽然您可以获得

我想使用文件的临时目录作为需要在远程目录中读写的多个应用程序(来自多台计算机)的锁,但在文档中没有解决这个问题。有人知道同时打两个电话会发生什么吗

注意:我知道使用数据库是最好的,但在我的情况下,这是不可能的。

当您从不同的机器通过相同的目录名调用时,只有一个调用会成功。如果调用的是实际生成目录的函数,则API函数将仅返回
TRUE
。拥有该文件系统的机器上的操作系统使该进程原子化

但是,在对
CreateDirectory
的两次调用之间,没有什么可以阻止另一个处理进入并删除目录。因此,虽然您可以获得一种原始形式的锁定,但它不是非常健壮,需要各方合作

同样的推理也适用于
CreateFile

当您从不同的机器调用相同的目录名时,只有一个调用会成功。如果调用的是实际生成目录的函数,则API函数将仅返回
TRUE
。拥有该文件系统的机器上的操作系统使该进程原子化

但是,在对
CreateDirectory
的两次调用之间,没有什么可以阻止另一个处理进入并删除目录。因此,虽然您可以获得一种原始形式的锁定,但它不是非常健壮,需要各方合作


同样的推理也适用于
CreateFile

您想要使用它的方式将不起作用-至少不会以一种健壮的方式。。。第二个电话就会成功。。。您描述的场景与“线程安全”IMHO完全无关。。。虽然由于您使用的是远程目录(即网络/SMB共享?),具体行为取决于操作系统版本等,但实际上并不涉及线程安全;您要问的是,如果两个程序同时尝试创建/读取相同的文件/目录,会发生什么情况。举个例子,我不知道Win32 API,但是如果一个函数的手册或文档页面没有明确地说它是线程安全的,那么我认为函数不安全。安全总比抱歉好。你对标题的看法是对的,我更改了它。另外,谢谢你的链接,但我的问题有点不同,因为我有多个应用程序(在不同的机器上)访问同一个文件。我不知道这是不是完全一样的东西。你想用的方式是行不通的-至少不是以一种健壮的方式。。。第二个电话就会成功。。。您描述的场景与“线程安全”IMHO完全无关。。。虽然由于您使用的是远程目录(即网络/SMB共享?),具体行为取决于操作系统版本等,但实际上并不涉及线程安全;您要问的是,如果两个程序同时尝试创建/读取相同的文件/目录,会发生什么情况。举个例子,我不知道Win32 API,但是如果一个函数的手册或文档页面没有明确地说它是线程安全的,那么我认为函数不安全。安全总比抱歉好。你对标题的看法是对的,我更改了它。另外,谢谢你的链接,但我的问题有点不同,因为我有多个应用程序(在不同的机器上)访问同一个文件。我不知道是不是完全一样。@Yahia不,不是。谢谢。@Yahia不,没有。谢谢