一个全局变量在不同线程的函数里访问为何不行

一个全局变量在不同线程的函数里访问为什么不行?

int i = 0;

void test()//定时器消息处理函数,每0.5秒执行一次
{
    //主线程
     cout<< i <<endl;//为什么一直是0????
}

void test()
{
    //子线程
    i = 3;
}


------解决方案--------------------

int i = 0;
pthread_mutex mutex;
void test()//定时器消息处理函数,每0.5秒执行一次
{
    //主线程
pthread_mutex_lock(&mutex);
     cout<< i <<endl;//为什么一直是0????
pthread_mutex_unlock(&mutex);
}

void test()
{
    //子线程
   pthread_mutex_lock(&mutex);
    i = 3;
pthread_mutex_unlock(&mutex);
}