我正在使用libonion库编写一些东西,这是多线程的,并且只是想知道如何检测任何其他线程是否正在声明任何文件指针 read 。
(基本上我想创建手动处理的临时文件,如果没有人从他们那里读取它们就会被删除。)
答案 0 :(得分:0)
文件指针只是指向文件资源的指针,并且只是通过查看指针无法确定是否有其他线程正在读取它。您可能希望在文件指针旁边声明互斥锁和全局锁定计数。当任何线程打算读取它时,它可以获取互斥锁上的共享锁增加锁定计数,并在线程无意进一步读取文件时减少锁定计数后释放它。
您可以查询此锁定计数以查看该值是否为零,在这种情况下您可以安全地释放它。
另请注意,由于此锁定计数是全局的,并且您最终可能处于竞争状态,因此应该专门读取和更新锁定计数变量。