关闭(fd)和释放鸡群之间的延迟

时间:2017-08-22 17:29:29

标签: c++ linux

我有一个c ++类,基本上在构造函数中打开一个文件,在ReadAcquire()或WriteAcquire()成员函数中fld fd如下:flock(fd,(IsReaderLock?LOCK_SH:LOCK_EX)| LOCK_NB),并关闭fd在Release()成员函数中。然后我运行了这个测试代码:

for (int i = 0; i < 10000; i++)
{
    FileLock lock1("/tmp/Test");
    VERIFY_IS_TRUE(lock1.WriteAcquire().IsSuccess());
    lock1.Release();
    FileLock lock2("/tmp/Test");
    VERIFY_IS_TRUE(lock2.ReadAcquire().IsSuccess());
    lock2.Release();
}

它在一个简单的测试程序中工作正常。但是在一个复杂的程序中(多线程运行,许多基于实时信号的定时器等),经常会发生ReadAcquire()或WriteAcquire()中的flock()调用将失败,错误代码为11,即EWOULDBLOCK,我从来没有得过EINTR。通过重试,它通常在间隔1ms的最多5次重试中恢复。这种行为有什么解释吗?我假设close(fd)应立即释放羊群。谢谢。

0 个答案:

没有答案