Homework‎ > ‎

Race Condition

1. 다음 기능을 하는 프로그램(add1)을 만드시오
1)데이타 화일의 마지막 숫자를 읽어서 1을 더해서 그 화일의 끝에 추가해서 기록(데이타 화일은 초기에 0만 써있다.)
2)위 함수를 1000번 호출
3)이 프로그램을 실행하면 0 부터 1000까지 1001개의 숫자가 기록될 것이다.

예제

int Load( ...) {
  // open file
  // read the las data
  // close file
}

void Store(int data) {
  // open file
  // append the data
  // close file
}

int Add(int i,j) {
   return i+j
}

Cal( ...) {
for ( ... ) { // 1000번?, 10000번?
   x=Load( ... );
   x=Add(x,1);
   Store(x)
   }
}


2. 이 프로그램을 두개 이상 동시에 실행하여 결과를 살펴보시오
1) n개를 동시에 실행했을 때 화일의 마지막 숫자가 1000*n인가?
리눅스 쉘에서 프로그램을 두개 이상 동시에 실행하는 방법
$ ./add1 & ./add1 & ./add1        // 2개는 백그라운드에서 나머지 하나는 포그라운드에서 실행됨
// 이경우 화일의 끝에는 3000 이 기록되어야 정상임
// 이경우 화일의 끝에는 3000 이 기록되어야 정상임
2) 결과가 1000*n이 아니라면 그 원인은 무엇인지 설명하시오. 

3. 제출
가상캠퍼스에 화일을 올리고 출력물을 수업시간에 별도로 제출한다.
Comments