C - 从带有线程的文件中读取

时间:2013-09-01 15:06:52

标签: c multithreading mutex

我必须从文件中读取一些带有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命令传递的。

1 个答案:

答案 0 :(得分:2)

是的,这些完全相同。

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