프로그램의 동작 과정에서 시간적 개념을 포함한 개념(프로세스 or 스레드 등)이나 시스템 상태에 대한 정보(자원 잠금이나 세션 정보)에 관련된 취약점을 말한다.
ex) 데드락(DeadLock)이나 자원 경쟁에 대한 조건, 세션 고착
병렬시스템에서는 자원을 사용하기 앞서 자원의 상태를 검사한다.
하지만 자원을 검사하는 시점과 자원을 사용하는 시점이 다르기 때문에, 이 둘 사이의 간극동안 존재하던 자원이 사라져 상태가 변하는 경우가 발생한다.

TOC(Time of Check) → 해당파일이 존재하는지 검사하는 과정
TOU(Time of Use) → 실제 사용 지점
class FileAccessThread extends Thread{
// synchronized 를 사용함으로써 블록을 수행하는 동안 지정된 객체에 lock이
// 걸려서 다른 Thread 객체 f에 접근할수 없다.
public synchronized void run(){
try{
File f new File("Test_367.txt");
if(f.exists()){
BufferedReader br = new BufferedReader(new FileReader(f)); br.close();
}
}
catch(IOException e) { System.err.println("IOException occured"); }
}
}
class FileDeleteThread extends Thread{
public synchronized void run(){
File f = new File("test.txt");
if(f.exist()){
f.delete();
}
}
}
-----------------------------------------------------------------------------
public class S367 |
public static void main(String[] args) {
FileAccessThread fileAccessThread = new FileAccessThread();
FileDelete Thread fileDeleteThread = new FileDelete Thread();
fileAccessThread.start();
fileDeleteThread.start();
}
}
재귀의 순환횟수를 제어하지 못하여 할당된 메모리나 프로그램 스택등의 자원을 과다하게 사용하면 위험하다. 대부분 귀납조건이 없는 재귀함수는 무한루프에 빠져들게 되고 자원고갈을 유발하여 시스템의 정상적인 운영을 막는다.