C언어 스레드 질문

spring7s의 이미지

이 코드를 실행해서 ox를 순서대로 20번 출력해야하는데 왜 중간에 xoox로 나오는 지 모르겠습니다.

#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
 
int myglobal;
void *thread_function(void *arg) {
  int i, j;
  for(i=0;i<20;i++){
    j=myglobal;
  j=j+1;
  printf("x");
  fflush(stdout);
  sleep(1);
  myglobal=j;
  }
  return NULL;
}
 
int main(void){
  pthread_t mythread;
  int i;
 
  if(pthread_create(&mythread, NULL, thread_function, NULL)){
    printf("ldquo:error creating thread.");
    abort();
  }
 
  for(i=0;i<20;i++){
    myglobal=myglobal+1;
    printf("o");
    fflush(stdout);
    sleep(1);
  }
}
File attachments: 
첨부파일 크기
Image icon 스샷1.png2.65 KB
익명 사용자의 이미지

왜 두 스레드가 교대로 출력할 거라고 생각하죠? 약속이라도 하나요?

익명 사용자의 이미지

질문자님이 모르니까 물어 볼 수 있는거지 왜이리 까칠해요.. ㅋ

@질문자님
쓰레드는 실행순서와 비례해서 실행되지 않습니다.
아래 글타래 참고해보세요~

https://kldp.org/node/120115

라스코니의 이미지

sleep()의 정밀도가 높지 않습니다. 적어도 > 10ms 이상된다고 보셔야 되고... 그래서 각 'O', 'X' 문자를 찍은 시점에 차이가 날 수 있습니다.

반드시 순서대로 찍어야 한다면 세마포 등의 IPC (Inter Process Communication) 방법을 쓰셔야 합니다.