【发布时间】:2018-02-06 16:04:00
【问题描述】:
如GNU C Library documentation
fcntl(F_OFD_SETLK) 锁定打开的文件表条目,(通常由open() 获得)。容易理解。
但在同一文档中的 next example 中:
在示例进程中,每个线程调用open(),因此每个文件描述符应该指向不同的打开文件表条目。
如果在每个线程中从 fcntl(fd, F_OFD_SETLKW, &lck) 获取的锁与一个新的打开文件表条目相关联,则每个线程都在每个线程中获取由 open() 返回的这个新打开文件表条目的锁线程。
那么不同文件表项上的锁怎么能提供独占写访问呢?
我错过了什么?
【问题讨论】:
-
我不明白这个问题。为什么您认为“只是在不同的打开文件表条目上获得锁定......意味着这种锁定是完全错误的”?
-
该示例显示了每个线程如何锁定文件以获得独占写入访问权限,从而导致其他线程停止直到锁定被释放。现在你的问题是什么?
-
如果从每个线程中的 fcntl(fd, F_OFD_SETLKW, &lck) 获取的锁与一个新的打开文件表条目相关联,那么每个线程都将在这个新的打开文件表条目上获得一个锁open() 在每个线程中。那么不同文件表项上的锁怎么能提供独占写访问呢?
标签: linux-kernel glibc locking multithreading flock