리눅스 멀티 쓰레드 예제

avatar
| Uncategorized

과정은 당연히, 그것은 생성 될 때 그 삶을 시작합니다. Linux에서는 fork() 시스템 호출을 통해 발생하며, 이 호출은 기존 프로세스를 복제하여 새 프로세스를 만듭니다. fork()를 호출하는 프로세스는 부모인 반면 새 프로세스는 자식입니다. 부모는 실행을 다시 시작하고 자식은 호출이 반환되는 동일한 위치에서 실행을 시작합니다. fork() 시스템 호출은 커널에서 두 번 반환됩니다. 이 자습서에서는 Pthread 사용에 대한 개념, 동기 부여 및 디자인 고려 사항에 대한 소개로 시작합니다. PthreadAPI의 세 가지 주요 루틴 클래스는 스레드 관리, 뮤텍스 변수 및 조건 변수의 세 가지 주요 클래스를 다룹니다. 예제 코드는 새 Pthread 프로그래머가 필요로 하는 대부분의 Pthread 루틴을 사용하는 방법을 보여 주기 위해 전체적으로 사용됩니다. 이 튜토리얼은 LLNL 세부 사항 및 pthreads와 MPI를 혼합하는 방법에 대한 논의로 끝납니다. 수많은 예제 코드(C 언어)가 포함된 랩 연습도 포함되어 있습니다. 스레드에 대한 자세한 내용은 http://pauillac.inria.fr/~xleroy/linuxthreads/ LinuxThreads 홈 페이지를 방문하십시오. 이 페이지에는 많은 예제 및 자습서에 대한 링크가 포함되어 있습니다.

또한 스레드 라이브러리가 없는 경우 스레드 라이브러리를 다운로드할 수 있는 링크도 있습니다. 다운로드는 libc5 기반 컴퓨터가 있는 경우에만 필요합니다. 배포판이 glibc6 기반인 경우 LinuxThread를 컴퓨터에 이미 설치해야 합니다. 내가 쓴 스레드 응용 프로그램의 소스 코드, gFTP, http://www.newwave.net/~masneyb/ 내 웹 사이트에서 다운로드 할 수 있습니다. 이 코드는 이 문서에서 언급한 모든 개념을 사용합니다. @steve 안녕하세요 스티브, 당신에게 귀중한 의견을 주셔서 감사합니다. 당신이 통지에 가져 온 두 가지 포인트는 리눅스 스레드의 진행 중인 시리즈의 다음 부분에서 다룰 것입니다. 이 부분은 스레드가 어떻게 살아 있는지에 대한 작은 개요를 제공하기위한 것이었기 때문에 의도적으로 `pthread_exit()`와이 부분의 `sleep()` 함수에 집중하지 않았습니다. 후속 부분은 레이어를 벗겨내고 `pthread_exit()`와 sleep()을 사용하지 않아야 하는 이유 등을 포함한 더 깊은 측면에 초점을 맞출 것입니다. 시스템은 고유한 프로세스 식별 값 또는 PID로 프로세스를 식별합니다. PID는 불투명 type5 pid_t로 표시되는 수치값으로, 일반적으로 int입니다.

이전 유닉스 및 리눅스 버전과의 이전 버전과의 이전 버전 과의 호환성 때문에 기본 최대값은 32,768 (짧은 int의 값)에 불과하지만 값은 선택적으로 형식을 제공하는 전체 범위로 늘릴 수 있습니다. 커널은 이 값을 각 프로세스 설명자 내부에 pid로 저장합니다. 이 문서에서는 스레드를 만들고 식별하는 방법에 중점을 둡니다. 또한 기본 스레드 프로그래밍을 수행하는 방법을 설명하는 작업 C 프로그램 예제도 제공합니다. 리눅스 스레드 시리즈: 부품 1, 부품 2 (이 문서), 부품 3. 스레드로 단축되는 실행 스레드는 프로세스 내의 활동 개체입니다. 각 스레드에는 고유한 프로그램 카운터, 프로세스 스택 및 프로세서 레지스터 집합이 포함됩니다. 커널은 프로세스가 아닌 개별 스레드를 예약합니다. 기존의 유닉스 시스템에서는 각 프로세스가 하나의 스레드로 구성됩니다. 그러나 최신 시스템에서는 둘 이상의 스레드로 구성된 다중 스레드 프로그램이 일반적입니다. 나중에 볼 수 있듯이, 리눅스는 스레드의 독특한 구현: 그것은 스레드와 프로세스 를 구별 하지 않습니다.

Linux에게 스레드는 특별한 종류의 프로세스일 뿐입니다. 유닉스 시스템의 프로세스 간에는 고유한 계층 구조가 존재하며 Linux도 예외는 아닙니다. 모든 프로세스는 PID가 하나인 첫 번째 프로세스의 하위 프로세스입니다. 커널은 부팅 프로세스의 마지막 단계에서 시작됩니다. 또한 init 프로세스는 시스템 인부트스크립트를 읽고 더 많은 프로그램을 실행하여 결국 부팅 프로세스를 완료합니다. 종종, 포크 직후 새로운, 다른, 프로그램을 실행하는 것이 바람직하다. exec*() 함수 호출 제품군은 새 주소 공간을 만들고 새 프로그램을 로드하는 데 사용됩니다.