0

我需要在我的程序中缓存文件指针,但问题是我可能有多个线程访问该文件指针缓存。例如,如果 thread1 请求文件指针,并且发生缓存未命中,则调用 fopen 并缓存指针。现在,当线程 2 到达并发生缓存命中时,两个文件共享导致错误的读/写指针。我想到的一些事情——

  • 我可以跟踪文件的使用时间,但目前我不知道它什么时候发布,并且包含此功能会干扰我的设计
  • 如果发生命中,我可以发送文件指针的副本,但我不知道这样做的任何方法,以便这两个副本不共享读/写位置

我应该如何进行?

4

1 回答 1

0

您是否担心优化文件打开操作?我认为你让它变得比它应该的更复杂和容易出错。文件指针 ( FILE*) 不是线程安全的结构,因此您不能跨线程共享它们。

您可能需要做的(如果您真的想缓存文件打开操作)是保留将文件名映射到文件描述符(an int)的字典,并有一个线程安全函数按名称返回描述符,如果不是则打开在字典里。

当然,从多个线程对同一个文件描述符进行 I/O 也需要进行规范。

于 2013-09-26T13:46:13.523 回答