我在写一些利用libonion库的东西,它是多线程的,只是想知道如何去检测是否有任何声明的文件指针正在被其他线程读取读取或不。检测文件当前是否正在读取
(基本上我想创造一个他们如果从他们没有一个人的阅读去掉了手工处理的临时文件。)
我在写一些利用libonion库的东西,它是多线程的,只是想知道如何去检测是否有任何声明的文件指针正在被其他线程读取读取或不。检测文件当前是否正在读取
(基本上我想创造一个他们如果从他们没有一个人的阅读去掉了手工处理的临时文件。)
文件指针只是一个指向文件资源,以及是否有其他线程正在读它不能通过只看指针来确定。您可能想要在文件指针旁边声明一个互斥锁和一个全局锁定计数。当任何线程想要读取它时,它可以获得互斥体上的共享锁,从而增加锁定计数并在线程无意进一步读取文件时减少锁定计数后释放它。
可以查询该锁定计数,看看是否值是零,在这种情况下,你可以安全地释放它。
另外请注意,这个锁计数是全球性的,你可以在比赛条件下结束,读取和更新锁定计数变量应完全完成。
POSIX为此提供了一个'rwlock'原语。没有意义重新发明轮子......另外,如果OP实际上使用'FILE *'而不是低级文件描述符访问,那么当多个线程同时读取相同的'FILE'时,几乎无法做任何有意义的事情,所以(单个)读线程可以在其使用期间调用'flockfile',然后在完成时调用'funlockfile'。想要获取临时文件的线程可以使用'ftrylockfile'来测试该文件是否仍在使用中。但是,我认为最好是在评论中这样做,避免整个问题。 –
你可以只删除临时文件打开后,经过最后一道工序已经关闭他们,他们会自动从文件系统中删除。 – hochl
做什么hochl说。没有理由等待删除临时文件。 stdio'tmpfile'函数的一个很好的实现应该在文件甚至返回之前删除它... –