我看到奇怪的行为,我想知道这是否是一个竞争条件。
奇怪的行为是MySQL试图创build一个临时文件时得到EEXIST 。 MySQL默认重用临时文件名,并且因为它从名称池中按顺序select名称,所以如果名称#sql_<pid>_0.<ext>总是被选中,如果它尚未被使用(最后0表示名称在池中的位置)。
我知道NFS模拟取消链接,因为要求在打开的文件上保留块。 当您取消NFS卷上的文件链接时,客户端将重命名该文件,然后当客户端上的进程closures时,最后执行取消链接。
但是如果我断开文件链接,然后第二个线程试图在解除链接之后毫秒内重新创build一个具有相同名称的文件呢?
是否有可能重命名是asynchronous的,可能会被延迟到第二个线程得到一个EEXIST错误,即使我的线程认为它已经完成了它的unlink()调用成功?