thread를 사용한 구구단 [C, Linux]

thread를 사용한 구구단 프로그램[C, Linux]

안녕하세요.

오늘은 유닉스라는 과목을 들으면서 제가 만든 코드를 올려보려고 합니다.

  • 구구단을 출력하는 thread program
  • thread function이 한번 불리면 한 단을 출력
  • 한번에 한단씩 섞이지 않고 출력(pthread_join사용)

코드

코드는 아래와 같습니다.

코드 파일은 깃허브에서 다운받으실 수 있습니다.

(귀찮아서 나중에 링크 올릴게요.)

실행

실행을 하기 위해서 리눅스 환경(라즈베리파이 라즈비안)에서 실행했습니다.

컴파일은 gcc로 아래처럼 했습니다. (-lpthread 주의!!)

이렇게 컴파일한 파일을 실행해보면 아래 사진처럼 정상적으로 실행이 됩니다.

(물론 9단까지 다 잘 됩니다.)

먼저 쓰레드 프로그래밍이 좋은점.

1. 빠른 실행: 프로세스를 새로 생성하는데 드는 비용(컴퓨터 자원)을 절약

2. 데이터 공유: 파일, heap, static, code의 많은 부분을 공유

3. cpu를 보다 효율적으로 활용: 코어가 여러 개일 경우 코어에 thread를 할당

but. 프로그래밍의 난이도가 상승하고 디버깅이 어려우며 제대로 만들기가 힘듬.

주요 코드 설명

위의 코드에서 구구단은 당연히 알테니 굳이 설명하지 않고 thread부분만 올리겠습니다.

위의 구구단 코드랑 비교하면서 보면 이해가실겁니다.

1. pthread_create(쓰레드를 생성하는 부분)

2.pthread_join(thread가 종료될 때까지 대기) 

  -이걸 사용해서 쓰레드가 끝날때까지 기다렸다가 끝나면 다음 명령을 실행합니다.

  여기서는 1단을 실행중이면 1단이 끝날 때까지 기다렸다가 2단을 실행합니다.(thread의 좋은점이....사라짐...)

3. pthread_detach (여기서는 쓰이지 않았지만) 아래와 같음

4. pthread mutex_lock/unlock(쓰레드간 공유하는 데이터 영역을 보호하기 위해서 사용함.)

  -pthread_mutex_t: 구조체

  -init은 mutex객체 초기화 

  -당연히 lock은 잠금 unlock은 잠금을 풀어주는 것.

  -destroy는 객체를 삭제하고 자원을 되돌려주는 것

Designed by JB FACTORY