C++でマルチスレッドプログラミング

スレッド1とスレッド2を展開させてみてます。
タイミングはsleep()の中身でいじるものなんだろうか…?

#include <pthread.h>
#include <stdio.h>

void* thread1(void* pParam); //スレッド1
void* thread2(void* pParam); //スレッド2
int i=0;

int main(int argc,char *argv[]){
  pthread_t tid1,tid2; //スレッド識別関数
  //スレッドの作成
  pthread_create(&tid1,NULL,thread1,NULL);
  pthread_create(&tid2,NULL,thread2,NULL);

  //スレッド終了待ち
  pthread_join(tid1,NULL);
  pthread_join(tid2,NULL);
  return 0;
}

//スレッド1
void* thread1(void* pParam){
  i=3;//スレッド1でi=3する
  while(1){
    printf("hello\n"); 
    sleep(1);
  }
}

//スレッド2
void* thread2(void* pParam){
  while(1){
    printf("world\n");
    printf("%d",i);//スレッド1でi=3されたやつがスレッド2にちゃんと適用されてる。
    sleep(3);
  }
}