【发布时间】:2018-12-04 01:47:57
【问题描述】:
我正在linux上开发一个小型c程序,两个线程需要使用相同的文件描述符(实际上是unix域套接字),所以我只是设置了一个文件描述符的全局变量,在一个线程打开文件并使用另一个线程,但似乎没有共享,我将代码简化如下:
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<fcntl.h>
int gfd = 0;
int test = 2;
void* thr_fun1(void* arg)
{
printf("thr 1 gfd %d test %d \n",gfd, test);
}
int main()
{
int gfd = open("aaa.txt", O_RDWR | O_CREAT, 0664);
pthread_t tid;
int err;
printf("thr main gfd %d test %d \n",gfd, test);
test = 12;
err = pthread_create(&tid, NULL, thr_fun1, NULL);
if(0 != err)
printf("can't create thread\n");
sleep(2);
}
操作系统是 Ubuntu 16.04.4 LTS(GNU/Linux 4.13.0-36-generic x86_64)
liu@ns:~$ gcc -pthread -o fd fd.c
liu@ns:~$ ./fd
thr main gfd 3 test 2
thr 1 gfd 0 test 12
我的问题是:为什么全局变量test是共享的,而gfd却不是?
【问题讨论】:
-
因为范围。你在
main中声明了一个不同的gfd。
标签: c linux multithreading