'C언어'에 해당되는 글 2건

  1. C언어 pthread 사용 방법
  2. 포인터 배열 테스트 코드

pthread를 이용하여 스레드를 구동하기 위해서는 pthread_create 함수를 사용합니다.


간혹 스레드를 사용하고 나서 스레드 종료시키는 것을 잊어 버리게 되는데요…
간단한 테스트 프로그램에서는 문제가 되지 않지만, 고객이 사용하는 프로그램이나 전문적인 프로그램에서는 프로그램이 종료 되기 전 반드시 스레드가 먼저 종료 되어야 합니다.


스레드가 동작 중일 때 프로그램이 먼저 종료 될 경우 에러나 예기치 않는 문제가 발생할 수 있기 때문입니다. 따라서, pthread_join 함수를 사용하여 생성된 스레드가 종료 될 때까지 기다리고 프로그램이 종료 되도록 구현합니다.


다음은 pthread 사용 방법 소스코드 입니다.

#include <pthread.h>
 
static pthread_t p_thread;
static int thr_id;
static bool thr_exit = true;
 
/**
 * 스레드 함수
 */
void *t_function(void *data)
{
	while(!thr_exit)
	{
		...
	}
 
	pthread_exit((void *) 0);
}
 
/**
 * 스레드 시작
 */
void start_thread()
{
	thr_exit = false;
	thr_id = pthread_create(&p_thread, NULL, t_function, NULL);
}
 
/**
 * 스레드 종료
 */
void end_thread()
{
	thr_exit = true;
	pthread_join(p_thread, (void**)NULL);	// 해당 스레드가 종료되길 기다린다.
}

/**
 * 메인 함수
 */
void main()
{
	start_thread();

	...

	end_thread();
}



references


'개발이야기 > C, C++' 카테고리의 다른 글

포인터 배열 테스트 코드  (0) 2012.08.07
C코드 메모리릭 잡기  (0) 2012.07.18
부모 클래스의 기본생성자가 없을때 메모리 누수 현상  (2) 2012.06.12
마방진 원리 및 문제  (4) 2012.05.19
Mangled Name  (0) 2012.05.13


포인터 배열 관계에 있어서 햇갈리는 부분을 테스트 해보았다.

int* arr[3];


위와 같은 포인터 타입의 배열에서 의문을 품었다.

배열에서 새로운 객체(or 배열)의 생성이 자유로이 될까?

만약 배열이 생성가능하면 2차원 배열로써 활용가능할까?

에 해당하는 것이다.


  
int _tmain(int argc, _TCHAR* argv[])
{
	int a = 1;
	int b = 2;
	int c = 3;

	int* arr[3];

	arr[0] = new int[3];
	arr[1] = &b;
	arr[2] = &c;

	arr[0][0] = 4;
	arr[0][1] = 5;
	arr[0][2] = 6;

	printf("%d\n", arr[0][2]);
	printf("%d\n", *arr[1]);
	printf("%d\n", *arr[2]);

	return 0;
}

위의 코드는 정상 수행되는 코드로 결과 출력값은 다음과 같다.

※ 출력결과
6
2
3


즉, 배열에서 새로운 객체(or 배열)의 생성이 자유로이 되며,

포인터 배열에서 새로운 배열 할당시 2차원 배열로써 활용이 가능하다.

C와 C++ 알아나가면 알아나갈수록 유연하게 잘 설계되어 있는것 같다. ^^


'개발이야기 > C, C++' 카테고리의 다른 글

C언어 pthread 사용 방법  (0) 2014.03.05
C코드 메모리릭 잡기  (0) 2012.07.18
부모 클래스의 기본생성자가 없을때 메모리 누수 현상  (2) 2012.06.12
마방진 원리 및 문제  (4) 2012.05.19
Mangled Name  (0) 2012.05.13