Mutex(뮤텍스), Semaphore(세마포어),모니터(Monitor)
= 자원에 대한 동시 접근을 방지하여 원활한 자원 분배가 될 수 있는 동기화 기법
Semaphore(세마포어 - 상호 배제)
- 자원 접근에 대한 동기화 기법
- Mutex는 하나의 task(thread)에 대해서 자원에 대한 접근을 허용하나 Semaphor는 여러개의 Task(thread)가 접근이 가능
- 일반적으로 wait와 signal로 표현
=======================예제=============
//Critical Section에 접근가능한 thread 수
int count = 3;
void wait(int count)
{
count--;
bool loop=true;
while(loop)
{
if(count>0) loop=false; //count가 0보다 크면 사용할 queue 있음
else sleep(10); //사용해야하는 queue가 나올 때 까지 기다리는 것
}
}
void signal(int count)
{
count++;
bool loop=true;
while(loop)
{
if(count<0) sleep(10); //count 가 0보다 커질 때 까지 대기(사용할 queue 가 없음)
else loop=false;
}
}
===================
wait(count)
//Critical Section의 자원을 접근하기위한 허락을 받음
Critical_Section()
signal(count)
============================================================
Mutex(뮤텍스 - 상호배제)
- Locking 과 Unlocking을 통한 자원 사용
- Cirtical Section(임계영역)을 가지 task들이 Runntime에 동시에 자원에 접근하지 않게 자원 사용을 독점
- mutil processes 의 Share Resource에 대한 동시 접근 방지
- Mutex는 Semaphore의 바이너리 값을 갖음
=========== 예제 ===================
bool locked = true
void Access()
{
//locked 값을 통해서 자원을 선점(cirtical section)
while(locked)
{
.....
.....
.....
if(!locked) break; // locked 값을 (false)을 확인하고 자원을 반납
}
locked = true; // 자원을 선점하기 위해서 값을 변경
}
void escape()
{
locked = false; //작업이 완료 되었음을 확인
}
=========================================
Monitor(모니터)
- 하나의 process 내에서 Thread간의 동기화에 사용
- 프레임워크나 라이브러리로 제공
- c 언어는 현재(2020) 없고 Java는 있음
- synchronized, wait(), notify()를 통해 동기화 가능
- java method앞에 synchronized를 붙여(추가) 동기화(상호배제) 함수가 작성됨
================= 예제 ==========
synchronized void methods()
{
}
================================
2020.11.30 허용적 라이선스(Permissive license) 약한 카피레프트 라이선스(Week copyleft license) 강한 카피레프트 라이선스(Strong copyleft license) (0) | 2020.11.30 |
---|---|
2020.11.23 Linked Open Data (0) | 2020.11.23 |
2020.11.17 InsurTech(인슈어테크) (0) | 2020.11.17 |
댓글 영역