학습자료(~2017)/리눅스

[리눅스] 세마포어 - 자료 조사

단세포소년 2012. 3. 12. 15:33
반응형


한빛네트워크 세마포어(1) http://www.hanb.co.kr/network/view.html?bi_id=1398

한빛네트웤 세마포어(2) http://www.hanb.co.kr/network/view.html?bi_id=1399

joinc 세마포어 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/IPC/semaphores


System V 와 Posix 인터페이스의 차이점을 알고 세마포어의 개념, 사용방법, 응용을 아는 것이 중요하다.



작성 :

세마포어의 활용 방안이다.

1. 쓰레드간 공유변수가 1증가 , 1감소 연산 등 리스트 자료구조의 사이즈값이나 카운터값을 저장하여야 할 때 세마포어를 lock 하면 1감소, unlock 하면 1증가 연산을 원자적으로 보장하므로 세마포어를 사용하는 것이 좋다.

2. 쓰레드의 wait 함수를 만들 때 리눅스 pthread 계열 함수에는 pthread_wait 라는 함수가 없다. 조건변수(pthread_cond_t) 의 pthread_cond_wait 를 써도 좋지만 세마포어를 사용하는 것도 좋다. 쓰레드가 하나라면 조건변수를 사용하는 것도 좋지만 쓰레드가 여러개라면 세마포어를 이용하는것이 효율적일 것이다.

3. 어떤 자원(객체)에 대하여 참조갯수 저장용.. 어떤 자원에 대한 참조갯수값을 가지고 있고 참조갯수값이 0이 된다면 자원을 해제해야하는 경우가 있다. (예를 들어 윈도우 iocp 연산에서 우아한 소켓 해제 같은 경우?? 아니면 나만의 갈비지 콜렉터 만들 때 등등) 그럴 경우 원자적 연산이 보장되는 세마포어의 활용은 효율적이다.

주의사항 : 세마포어 값은 int 형이다. int 형의 최대, 최소값을 넘지 못한다. 그러므로 아주 큰 값(64비트)가 필요할때는 그냥 뮤텍스(이진 세마포)와 64비트 변수를 활용해야한다...

* 글 정말 못 썼지만 누군가는 알아보겠지.. 나중에 나도 못알아볼까 무섭다.. 


반응형