스레드란?
 
1. 경량화 된 프로세스
 - 프로세스와 마찬가지로 동시 실행이 가능하다.
 - 프로세스의 단점을 극복하기 위해 등장.
 
2. 프로세스와의 차이점
 - 스택을 제외한 나머지 메모리 영역을 공유
 - 보다 간단한 컨텍스트 스위칭
 - 일부 메모리를 공유하므로 스레드간 통신이 편리
 
사용자 삽입 이미지


쓰레드 생성
 
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void*(*start_routine)(void *), void * arg);

thread : 쓰레드 ID 할당
attr : 쓰레드 특성 설정, 기본 NULL
start_routine : 실행할 함수 적음
arg : 함수로 전달하는 인자 값
 
 
int pthread_join(pthread_t th, void **thread_return);
th : th인자에 들어오는 ID 쓰레드가 종료할때 까지 실행 지연
thread_return : 쓰레드 종료시 반환되는 2차 포인터
 
쓰는 이유
 
사용자 삽입 이미지

사용자 삽입 이미지


 
1. 임계 영역
 - 두 개 이상의 스레드의 의해서 동시에 실행되면 안 되는 영역
2. 스레드 안전한 함수 ( Thread safe function )
 - 임계 영역에서 호출이 가능한 함수
 - 컴파일시 -D_REENTRANT 옵션을 줘서 컴파일 하면 해결
 
 
< 출처 >
http://hydra01.egloos.com/page/4
출처 빌리씨 놀아볼까 | 빌리
원문 http://blog.naver.com/joasu/30005103435

리눅스에서 gcc로 스레드가 포함된 프로그램을 컴파일시에 아래의 옵션을 포함하여야 에러가

나지 않는다.. ㅡ.ㅡ


-lpthread

ex) gcc -o test test.c -lpthread

 

-_-+ 이거 찾느라 헤메다니.. 아 .. 역시 힘드심이요~! ㅠㅠ 


폴더에있는 모든 소스를 컴파일하여 실행화일을 만든다.

$ g++ -o test *.c


폴더에 있는 모든 오브젝트 파일과 실행화일을 제거한다.

$ rm -f *.o test



만약에 컴파일할때 실행화일의 이름을 정해주지 않으면 실행화일은 a.out 로 생성됩니다.(참고)


makefile 또는 Makefile 또는 GNUmakefile 중에 하나에


test : test.o

[텝] gcc test.o -o test

test.o : test.c

[텝] gcc -c test.c


라고 입력한후에


$ make 명령을 하면

컴파일이 됩니다.

([텝] 이라고 써져있는 부분은 실제로 탭을 누르시고 만약 스페이스로 하시면 Makefile:2 *** missing separator. Stop. 에러가 납니다.)



makefile 와 Makefile 와 GNUmakefile 중에 일반적으로 Makefiel 을 사용을 권장하는데

그이유는 GNUmakefile 은 예전버전의 make 실행과 호환이 안되는경우가 있고

makefile 은 소스와 헷갈릴수 있다고 하네요.




만약 소스가 test1.c test2.c test3.c 이렇게 3개라면


Makefile 을 다음과 같이 작성합니다.(만약 모든소스에 io.h 가필요하다고 했을경우)



test : test1.o test2.o test3.o

[텝] gcc test.o -o test test1.o test2.o test3.o

test1.o : io.h test1.c

[텝] gcc -c test1.c

test2.o : io.h test2.c

[텝] gcc -c test2.c

test3.o : io.h test3.c

[텝] gcc -c test3.c



라고 작성해주심되고요



objects = test1.o test2.o test3.o

test : $(object)

[텝] gcc test.o -o test $(object)

test1.o : io.h test1.c

[텝] gcc -c test1.c

test2.o : io.h test2.c

[텝] gcc -c test2.c

test3.o : io.h test3.c

[텝] gcc -c test3.c


clean :

[텝] rm $(object)



이렇게 작성해 주셔도 됩니다.




그런후에

$make 명령을 하시면 컴파일 및 링크가 되어서 실행화일 test 가 만들어지고요

$make clean 명령을 하시면 모든 오브젝트 화일이 지워집니다.




Makefile 을 다음과 같이 gcc 부분을 $(CC) 로 해도 되고요 g++ 로 해도 됩니다.


objects = test1.o test2.o test3.o

test : $(object)

[텝] $(CC) test.o -o test $(object)

test1.o : io.h test1.c

[텝] $(CC) -c test1.c

test2.o : io.h test2.c

[텝] g++ -c test2.c

test3.o : io.h test3.c

[텝] g++ -c test3.c


clean :

[텝] rm $(object)



gcc 를 $(CC) 로 바꿔 줘도 되는 이유는 Pre-defined macro 되어있어서 입니다.


CC 나 cc 는 gcc 를 의미한느 것으로 미리 정의 되어 있다는 얘기입니다.


gcc 는 또한 어셈 포트란 C++ 등을 모두 포함되어있으며, g++ 는 C++컴파일을 의미합니다.




다음은 Pre-defined macro 내용입니다.


AR = ar (Archive maintaining program)
AS = as (Assembler)
CC = cc (= gcc , C compiler)
CXX = g++ (C++ compiler)
CO = co (extracting file from RCS)
CPP = $(CC) -E (C preprocessor)
FC = f77 (Fortran compiler)
LEX = lex (LEX processor)
PC = pc (Pascal compiler)
YACC = yacc (YACC processor)
TEX = tex (TEX processor)
TEXI2DVI = texi2dvi (Texiinfo file processor)
WEAVE = weave (Web file processor)
RM = rm -f (remove file)


출처 : http://paper.cyworld.com/ggogilee/920537

'C/C++언어' 카테고리의 다른 글

각 언어별 3중 포인터  (0) 2008.05.06
쉬프트 연산과 곱셈  (0) 2008.03.26
[리눅스프로그래밍] makefile  (1) 2008.03.07
ASSERT(), VERIFY(), TRACE()  (0) 2008.03.04
템플릿 사용한 max 만들기  (0) 2008.03.03
<이클립스 디버그 방법>  (0) 2008.01.28
  1. sukja 2008.07.11 16:53 신고

    좋은 글 감사합니다~

+ Recent posts