我知道这听起来像是程序问题,但实际上不是。请容忍我:
我有一个客户遇到了一个我无法解释的奇怪问题:一个程序在共享SMB驱动器(Windows2008R2服务器)上使用一个在共享模式下打开的文件。
在文件中执行更新之前,程序将使用LockFile锁定特定的药剂,读取数据,将所需的更改写入这些部分,然后解锁它们。
这样做是为了确保同一程序的多个实例可以覆盖对方的更改。
在我的客户案例中,这个程序(在所有其他位置都表现得非常好)成功地锁定了文件,但是随后对同一个句柄的ReadFile调用失败了,GetlastError返回了错误64 The specified network name is no longer available。
因此,我的问题是:
在我看来,这是一个乐观的锁,但是windows默认不做乐观锁(它做机会主义锁)。
我的第一个怀疑是,这个问题是由反病毒软件(卡巴斯基)引起的,但是网站管理员发誓所有的AVs都排除了这个网络路径,无论是在客户端还是在文件服务器上。
客户端操作系统是Windows、7、2003和2008R2 (通过终端服务)的混合体。它似乎只发生在沉重的时候(早上,当每个人都进来,或在晚上,当每个人都注销)。
发布于 2013-08-27 06:47:43
答案比我想象的要简单得多:服务器NIC的设备驱动程序故障显然是所有这些故障的原因。
发布于 2013-08-26 16:08:04
这确实是一个编程问题,IMHO,但它可能会恢复到‘工作’的方式,通过降级您的操作系统。Windows 7在CIFS中引入了一种新的锁机制,这几乎可以肯定是导致您的问题的原因。这意味着您要么需要更新程序来使用新的锁方案(编程prob),要么需要降级或找到兼容性修复(管理问题)。
http://en.wikipedia.org/wiki/Server_消息_区块
https://serverfault.com/questions/525951
复制相似问题