학습자료/리눅스 2012. 3. 12. 10:22

기본 쓰레드 함수


2.1. pthread_create / 2.2. pthread_join


thread 를 처음 배우면서 시작하는 것이 pthread_create / pthread_join 이겠지요?

Main 함수 하나에서 2개의 thread 를 pthread_create 함수로 생성합니다.

각각의 thread 함수는 t_function 을 인자로 받으며 함수를 실행합니다.

t_function 은 while(1) 로 무한 loop 를 돌고 있내요.

그리고 pthread_join( 0, 1) 로 인해 Main 함수에서 2개의 thread 가 종료될 때까지 wait 하게 되내요.

결국 1개의 기다리는 Main 함수와 2개의 무한 Loop 를 도는 thread 가 실행 됩니다... 강제 종료 될 때까지 .. ^^

main 에서 join 을 하지 않는 경우, main 함수가 그냥 끝나기 때문에 thread 가 계속 동작하는것을 보기 위해 join을 합니다.

아니면 .. getchar() 정도로 사용자 입력을 기다리다가 끝내버려도 되겠죠?

사실 join 함수가 하는 일은 쓰레드자원을 해제 시켜주는 거라고 하내요. 해제 시켜주기 위해 ..

일이 끝날때 까지 계속 기다리는거다 .. 라고 생각하려 합니다.


위 예제에서는 thread 가 무한 loop 를 돌고 있지만 , thread 가 항상 loop 를 돌지는 않겠죠.

문제는 thread 가 종료하는 경우에도 메모리는 반환되지 않는다고 합니다.

이럴 경우에는 pthread_detach() 함수를 사용하면 된다고 하내요.


2.4. pthread_exit


pthread_create 로 만들어진 thread 함수가 3초간 loop 를 돌다가 pthread_ext() 함수를 호출합니다.
thread 를 빠져나온다는 말 이겠죠? 3초 후 join 으로 기다리던 main 함수도 종료가 되면서 프로그램이 정상 종료됨을 알 수 있습니다.

뭔가 thread 를 완전히 close 시킬 때 사용하면 되겠내요.

pthread_exit 는 현재 호출되어서 실행중인 쓰레드를 종료시킬때 사용한다. 기본적으로 POSIX 에서는 다른쓰레드가 강제로 다른 쓰레드를 종료 시킬수 없으며, 쓰레드가 스스로 pthread_exit 를 호출하여 종료하는수밖에 없다.

쓰레드가 이 시스템콜을 호출하면 커널은 쓰레드를 없애게된다. pthread_exit 의 결과는 pthread_join() 을 통하여 최종적으로 없어지게 된다.

[joinic 함수 형태 참고]
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3/pthread_exit?cx=002661009167463862046%3A8oq6cxlfibu&cof=FORID%3A9&q=pthread_exit&sa=Search&ie=EUC-KR#1257

2.5. pthread_cleanup_push


2.4. 예제와 거의 동일 한 예제내요. 다만 pthread_cleanup_push 라는 함수를 호출해 주고 있는대 ..

pthread_cleanup_push 함수로 특정 함수를 인스톨 하면

pthread_exit() 를 호출 할 때 알아서 인스톨 된 함수를 한번 호출해 주면서 thread 를 종료한다고 합니다.

음 .. 객체의 소멸자 같은 기능이내요.

thread 에서 동기화를 위해 걸어두었던 mutex lock 이나 메모리 해제를 주로 하면 되겠습니다. ^^

[첨가] : http://www.morenice.kr/78
pthread_cleanup_push 는 스택형식으로 관리 되어 여러개의 함수를 등록할 수 있고 thread가 종료되면 제일 마지막에 등록된 함수부터 자동으로 호출됩니다. 또한 pthread_cleanup_pop 함수를 통해 등록된 함수들을 스택 제일 마지막에 있는 함수부터 등록 해제 할 수 있습니다.

참고사항으로 pthread_cleanup_push와 pop은 함께 사용해야 합니다.
예를 들어, 아래 예제 함수와 같이 함수내에 두개가 꼭 쌍으로 있어야 합니다

[joinic 함수 형태 참고]
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3/pthread_cleanup_push
joinic pthread_cleanup_push 설명, 예제,

2.7. pthread_self

thread 가 실행 중인 함수 안에서 pthread_self() 라고 외치면 thread 고유의 id 를 얻을 수 있습니다.

동일한 함수를 실행중인 thread 를 구분해야 할 경우 혹은 클래스마다 thread 를 가지고 있는 경우 객체 할당이 될 때 id 를 가지고 있어도 좋겠내요.


[펌] :
http://libmarco.tistory.com/54


[참고 사이트]
joinic 리눅스 표준라이브러리 (pthread 함수 외 다수 libs):
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3

'학습자료 > 리눅스' 카테고리의 다른 글

[펌]리눅스에서 Semaphore 사용시 주의점  (0) 2012.03.13
[링크]Semaphore  (0) 2012.03.13
[링크]Pthread API Reference  (0) 2012.03.12
리눅스 기본  (0) 2012.01.17
shell 프로그래밍 기초  (0) 2012.01.13
posted by cozyboy
:
학습자료/리눅스 2012. 1. 17. 09:53

http://linuxmanpages.com
맨페이지

http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/man
시스템 라이브러리 정리, 한글 man 페이지

http://www.viper.pe.kr/docs/make-ko/make-ko_toc.html
http://wiki.kldp.org/KoreanDoc/html/GNU-Make/
한글 Make 설명

http://wiki.falinux.com
C 라이브러리 함수[설명 및 예제]

http://korea.gnu.org/manual/

GNU Korea 매뉴얼 페이지

http://busybox.net
리눅스 시스템 프로그래밍 오픈 소스


http://lxr.linux.no/

리눅스 소스 제공 사이트


'학습자료 > 리눅스' 카테고리의 다른 글

[펌]리눅스에서 Semaphore 사용시 주의점  (0) 2012.03.13
[링크]Semaphore  (0) 2012.03.13
[링크]Pthread API Reference  (0) 2012.03.12
pthread 기본  (0) 2012.03.12
shell 프로그래밍 기초  (0) 2012.01.13
posted by cozyboy
:
학습자료/네트워크 2012. 1. 17. 09:33

네트워크 클래스
http://blog.naver.com/myca11?Redirect=Log&logNo=80146514336
[간단한 쉬운 설명]

http://ko.wikipedia.org/wiki/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%ED%81%B4%EB%9E%98%EC%8A%A4
[위키백과]



IPv4의 주소체계는 4바이트(32비트)로 표현되며, 총 12 자리로 나타난다. IPv4에서 IP 주소는 네트워크 주소와 호스트 주소로 나뉜다.



클래스를 알아야 하는 이유 : 글래스 별로 IP 주소에서 네트워크 주소와 호스트 주소가 나뉘는 기준이 다르기 때문

총 32 비트 중
A클래스 : 네트워크 주소(8비트), 호스트 주소(24비트)   
B클래스 : 네트워크 주소(16비트), 호스트 주소(16비트)
C클래스 : 네트워크 주소(24비트), 호스트 주소(8비트)

시작 bit(가장 왼쪽에 있는 bit)
A클래스 : 0
B클래스 : 10  
C클래스 : 110

ex)B클래스 (10******.********.********)
최소 : 10000000.00000000.00000000.00000000
최대 : 10111111.11111111.11111111.11111111 


(++추가++) 서브넷 마스크
http://yagi815.tistory.com/355

 


'학습자료 > 네트워크' 카테고리의 다른 글

MTU, MSS [펌]  (0) 2013.06.17
zero-copy[펌]  (0) 2013.02.27
netstat 명령어 사용법 - 펌  (0) 2013.02.13
zero configuration networking  (1) 2013.02.12
SSL(Secure Sockets Layer)  (0) 2012.01.16
posted by cozyboy
: