我必须从文件中读取一些带有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命令传递的。
答案 0 :(得分:2)
是的,这些完全相同。
在这两种情况下,线程都有可见的互斥锁和FILE
指针,共享相同的值。