pthread 함수 예제

2019. 6. 15. 11:22·LINUX/Linux

만들고자 하는 프로그램 개요 정의

a.txt 에 쓰여있는 내용을

b.txt 로 복사하며 

몇 바이트가 복사된 것인지 메시지를 띄우고자한다.!

 

 

 

1. 먼저 파일 내용을 복사할 함수 'copyfilemalloc'을 들여다보자.

지역변수에 대한 포인터 반환시 해당 쓰레드가 함수를 실행하고 나서 반환하는 메모리 영역이 반환되어 버린다.. (컴퓨터 구조 이해가 이래서 중요하다.)

Q1. 만약 동적 메모리 할당이 아닌 bytesp를 static으로 선언한다면?

A. 하나의 쓰레드에서는 읽고 쓰는데 문제가 없지만

2개 이상의 쓰레드가 bytesp를 이용할 경우 둘다 같은 장소에 바이트수를 저장하므로

한 쓰레드가 다른 한쪽의 값을 덮어 씌우는 결과가 발생..

 

Q2. 동적 메모리 할당의 단점은?

A. 메인 쓰레드가 명시적으로 '해제' 해주지 않으면 메모리 leak 이 발생한다.

 

Q3. 다른 대안은?

A. 생성자 쓰레드 (create할때 생성된 스레드)가 한 공간을 별도로 또 생성

(여기서는 fd[2] fd[1]: 복사 소스파일 , fd[2] : 타겟 파일 이였는데

fd[3]에다가 읽은 바이트 수를 저장하는 '별도의 공간'을 따로 만들어서 

fd[3]의 주소를 반환!!! 하는 방법이 있다.

다음 포스팅에서 예제를 따로 살펴보자 ^ㅡ^

 

main에 필요한 헤더파일들!
지난 포스팅에서 나오듯 pthrea_create의 Interface를 보면 실행할 함수는 반드시 void형 포인터 리턴, 인자를 가지므로!

pthread_join 은 기다리는 쓰레드의 리턴상태를 받아오기 위해 이중포인터가 쓰인다.

왜? 타겟 쓰레드는 '일중' 포인터로 반환 할 것이기 때문에 그 주소값을 받으려면 이중포인터를 써줘야지~~ 암암!

 

copyfilemalloc의 마지막 리턴값은 bytesp로 (int형 포인터)이다!

고놈 (포인터)의 리턴을 받으려면 이중포인터가 필요한것이 당연하다.

 

 

컴파일명령에 끝에 -lpthread를 포함시켜줘야한다는 사실..

 

 

C는 역시..포인터를 이해하지 못하면 아무것도 몬한다.

'LINUX > Linux' 카테고리의 다른 글

Signal 개념  (0) 2019.06.15
pthread 함수 예제2  (0) 2019.06.15
vim, vi Editor 라인별 복사 / 삭제 / 붙여넣기 명령어  (0) 2019.06.07
하드 링크 , 심볼릭 링크 개념과 간단한 실험예제  (0) 2019.06.06
lstat, stat  (0) 2019.06.06
'LINUX/Linux' 카테고리의 다른 글
  • Signal 개념
  • pthread 함수 예제2
  • vim, vi Editor 라인별 복사 / 삭제 / 붙여넣기 명령어
  • 하드 링크 , 심볼릭 링크 개념과 간단한 실험예제
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    PostgreSQL
    java
    Bitcoin
    kafka
    백준
    알고리즘
    Kotlin
    프로그래머스
    algorithm
    ubuntu
    linux
    database
    JPA
    Programmers
    docker
    Git
    javascript
    android
    Spring
    C++
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
pthread 함수 예제
상단으로

티스토리툴바