思路:是否允许共享关系到是否采用了写实拷贝技术;如果不允许共享,两个线程去读取同一个对象,这没问题(只读属性)。但是,如果,有一个进程想要去修改这个对象,操作系统会为该线程在他处拷贝一个新的对象以作修改之用。如果允许共享,那么这个对象始终只会有一份。这就是验证各种对象(全局、、静态、堆、文件描述符)是否共享的关键!
一、 全局
线程thr_fun1试图将全局数据n = 10000修改为n = 10。如果数据不共享,在线程thr_fun1打印输出n的值,然后在主线程main输出n的值,前后两者是不一样的。因为在线程thr_fun1修改n的值的时候,操作系统会为堆上另外开辟空间来供给thr_fun1使用。结果是这样吗——拭目以待!!!
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
static int test = 10000;
int n = sizeof(test)/sizeof(int);
void* thr_fun1(void* arg)
{
n = 10;
printf("thr_fun1 thread is running! ");
printf("n = %d\n", n);
}
int main()
{
pthread_t tid;
int err;
err