任务1:定义一个全局变量 int a=10,主线程能否访问到,分支线程能否访问到;
答:可以访问到
任务2:分支线程中修改上述的a = 20, 问主线程中访问该a,是10还是20;
答:在主线程中访问该值依旧为10,在分支线程中为20
任务3:在主线程定义一个局部变量int b=1,分支线程能否访问到b;
答:不可以访问到
任务4:在分支线程定义一个局部变量int c=2,主线程能否访问到c;
答:不可以访问到
任务5:如果任务34不能访问到,则如何修改代码让对方能够访问到;
答:要用指针存储数据,调用指针即可在其他线程中调用数据
任务1
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int a = 6;
void *thread_func(void *p)
{
while(1)
{
sleep(1);
printf("在子线程中 a = %d\n",a);
}
}
int main(int argc, const char *argv[])
{
pthread_t num;
if(pthread_create(&num,NULL,thread_func,NULL)!=0)
{
printf("子线程创建失败\n");
return -1;
}
while(1)
{
sleep(1);
printf("在主线程中 a = %d\n",a);
}
return 0;
}
执行结果
任务2
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int a = 10;
void *thread_func(void *p)
{
int a = 20;
while(1)
{
sleep(1);
printf("在子线程中 a = %d \n",a);
}
}
int main(int argc, const char *argv[])
{
pthread_t num;
if(pthread_create(&num,NULL,thread_func,NULL)!=0)
{
printf("子线程创建失败\n");
return -1;
}
while(1)
{
sleep(1);
printf("在主线程中 a = %d \n",a);
}
return 0;
}
执行结果
任务3
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int a = 10;
void *thread_func(void *p)
{
int a = 20;
while(1)
{
sleep(1);
printf("在子线程中 a = %d b = %d\n",a,b);
}
}
int main(int argc, const char *argv[])
{
pthread_t num;
if(pthread_create(&num,NULL,thread_func,NULL)!=0)
{
printf("子线程创建失败\n");
return -1;
}
int b = 1;
while(1)
{
sleep(1);
printf("在主线程中 a = %d b = %d\n",a,b);
}
return 0;
}
执行结果
任务4
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int a = 10;
void *thread_func(void *p)
{
int a = 20;
int c = 2;
while(1)
{
sleep(1);
printf("在子线程中 a = %d c = %d\n",a,c);
}
}
int main(int argc, const char *argv[])
{
pthread_t num;
if(pthread_create(&num,NULL,thread_func,NULL)!=0)
{
printf("子线程创建失败\n");
return -1;
}
while(1)
{
sleep(1);
printf("在主线程中 a = %d c = %d\n",a,c);
}
return 0;
}
执行结果
任务5
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int a = 10;
int *point_b=NULL;
int *point_c=NULL;
void *thread_func(void *p)
{
int a = 20;
int c = 2;
point_c=&c;
while(1)
{
sleep(1);
printf("在子线程中 a = %d; b = %d; c = %d\n",a,*point_b,c);
}
}
int main(int argc, const char *argv[])
{
pthread_t num;
if(pthread_create(&num,NULL,thread_func,NULL)!=0)
{
printf("子线程创建失败\n");
return -1;
}
int b = 1;
point_b=&b;
while(1)
{
sleep(1);
printf("在主线程中 a = %d; b = %d; c = %d\n",a,b,*point_c);
}
return 0;
}
执行结果