NesC에 자주 볼 수 있는 키워드 중에 atomic 이 있다.
atomic은 race condition을 막기 위해 존재한다.
race condition이란, 인터럽트에 의해서 발생하는
비동기적 코드들이 갑작스럽게 사용중인 전역변수에
접근하는 일이 발생했을때 일어나는 충돌을 말한다.
해결방법은 다음과 같다.
- 전역변수를 사용하지 않는다.
- 인터럽트를 사용하지 않는다.
- 되도록이면 코드를 짧게 구성한다.
- atomic키워드를 사용한다.
여기서 atomic코드는 모든 전역변수의 값을
정의할때,
atomic {
var1 = var1 + 1;
var2 = var2 -1;
}
이렇게 하게 되면, 만약 이 데이터를
처리 도중에 다른 인터럽트가 발생한다고 해도 이 데이터에
대한 선점권이 넘어가지 않으므로, 충돌은 일어나지 않게 된다.
댓글 없음:
댓글 쓰기