1

我必须用 5 个线程从文件中读取一些数字(每个线程读取一个数字),同步对文件本身的访问。我想知道后续的处理方式是否让线程共享互斥锁和文件指针是等价的:

1)声明互斥量和文件作为全局变量读取

#include <....>

pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
FILE *fp;

int main(int argc,char *argv[]){

    fp=open_file(argv[1]);
}

2)为线程定义一个数据结构,然后将其字段与互斥锁和主函数中的文件相关联

#include <....>

struct data
{
   pthread_t tid;
   pthread_mutex_t *ptmx;
   FILE *f;

  .....
}

int main(int argc,char* argv[])
{
   FILE *fp=open_file(argv[1]);
   struct data td[5];
   pthread_mutex_t mtx;

   pthread_mutex_init(&mtx,NULL)

   for(i=0;i<5;i++)
   {
      td[i].f=fp;
      td[i].ptmx=&mtx;
   }

   ....
}

为简单起见,我只报告了一段代码,并假设该文件是使用 line 命令传递的。

4

1 回答 1

2

是的,这些是完全等价的。

在这两种情况下,线程都具有FILE可见的互斥锁和指针,共享相同的值。

于 2013-09-01T15:58:24.327 回答