concurrent 도구 간단 정리concurrent 도구 간단 정리

Posted at 2010. 11. 11. 11:32 | Posted in 개발이야기

POSIX-pthread나 이를 wrapping한 여러 라이브러리들, java concurrent 패키지 등에서 유사한 이름으로 사용되는

concurrent 관련 객체, 메소드 등을 간단히 정리한다.


Mutex: 한번에 하나의 thread만 critical section에 진입 가능 (lock, unlock)

  • lock: 하나의 thread만 lock을 획득할 수 있고, 다른 쓰레드는 lock이 풀릴때 까지 대기.
  • tryLock: lock의 성질에 의해 진입할 수 없는 경우, false등을 반환하여 lock획득에 실패했음을 알리고 즉시 리턴. 
    (아무도 lock을 안잡았으면 잡고, lock이 잡혀있으면 즉시 리턴)
  • timedTryLock: tryLock과 동일하나 lock 획득을 위해 일정시간 대기한다.
  • unlock: lock을 해제
Semaphore: N개의 thread만 critical section에 진입 가능 (acquire, release)
  • acquire: lock과 동일하나 N개의 thread가 진입할 수 있다.
  • tryAcquire: semaphore의 성질에 의해 진입할 수 없는 경우, false등을 반환하여 lock획득에 실패했음을 알리고 즉시 리턴. (semaphore를 획득할 수 있으면 획득, 아니면 즉시 리턴)
  • timedTryAcquire: tryAcquire와 동일하나 semaphore 획득을 위해 일정시간 대기한다.
  • release: acquire로 얻은 semaphore(lock) 반납.
ConditionVariable: 상태 변수 (wait, notify(또는 signal)). Lock 객체와 연계하여 사용됨.
  • wait: 특정 상태가 변경될 때까지 대기함(notify(signal) 또는 notifyAll(broadcast) 이 호출될 때까지 기다림).
  • timedWait: wait와 동일하나 특정 시간 동안만 대기한다.
  • notify(or signal): 대기 상태에 있는(wait를 호출한) thread를 깨운다. 동시에 여러 thread가 대기하고 있는 경우 임의의 thread 하나만 깨어난다.
  • notifyAll(or broadcast): 대기 상태에 있는(wait를 호출한) 모든 thread를 깨운다.

    //