리눅스 pthread_create 예제

리눅스 스레드 시리즈의 파트 I에서, 우리는 리눅스에서 스레드와 관련된 다양한 측면을 논의했다. 위에서 언급했듯이 전역 및 정적 변수가 있는 여러 스레드를 표시하는 C 프로그램은 모든 스레드가 데이터 세그먼트를 공유합니다. 전역 및 정적 변수는 데이터 세그먼트에 저장됩니다. 따라서 모든 스레드에서 공유 됩니다. 다음 예제 프로그램은 동일한 것을 보여 줍니다. 반환하기 전에 pthread_create()에 대한 성공적인 호출은 스레드가 가리키는 버퍼에 새 스레드의 ID를 저장합니다. 이 식별자는 다른 pthreads 함수에 대한 후속 호출에서 스레드를 참조하는 데 사용됩니다. 권장 사항: IF 문 대신 WHILE 루프를 사용하여 기다렸다가 대기한 상태를 확인하면 다음과 같은 몇 가지 잠재적인 문제를 해결하는 데 도움이 될 수 있습니다. 프로세스에 다른 프로세스 ID가 있습니다.

이는 POSIX 스레드 사양을 위반하는 것이며 표준에 대한 다른 많은 부적합의 원천입니다. pthread(7)를 참조하십시오. 위의 간단한 예는 스레드의 작동 방식을 보여 주는 간단한 예제입니다. 스레드에서 전역 변수에 액세스하는 것은 일반적으로 좋지 않습니다. 스레드 2가 스레드 1보다 우선 순위가 있고 스레드 1이 변수를 변경해야 하는 경우 는 무엇입니까? 실제로 여러 스레드에서 전역 변수에 액세스해야 하는 경우 뮤텍스를 사용하여 액세스해야 합니다. 다음은 위에서 설명한 세 가지 함수를 모두 사용하려고 시도한 예제 코드입니다. pthread_create() 함수는 호출 프로세스에서 새 스레드를 시작합니다. 새 스레드는 start_routine()를 호출하여 실행을 시작합니다. arg는 start_routine()의 유일한 인수로 전달됩니다. DEVC ++ 컴파일러에서 위의 코드를 실행하려고 하면 다음과 같은 오류가 발생합니다… 1)- [링커 오류] `_imp__pthread_self`에 대한 정의되지 않은 참조 2)- [링커 오류] `_imp__pthread_equal`에 대한 정의되지 않은 참조 3)- [링커 오류] `_imp__pthread_create` 4)-ld 반환 된 1 종료 상태 주() 시스템의 스레드를 식별하는 데 사용되는 정수인 pthread_t 형식입니다. thread_id를 선언한 후 pthread_create() 함수를 호출하여 스레드를 만듭니다.

pthread_create()는 4개의 인수를 사용합니다. 첫 번째 인수는 이 함수에 의해 설정된 thread_id에 대한 포인터입니다. 두 번째 인수는 특성을 지정합니다. 값이 NULL이면 기본 특성이 사용됩니다. 세 번째 인수는 스레드를 만들 수 있도록 실행할 함수의 이름입니다. 네 번째 인수는 함수 myThreadFun에 인수를 전달하는 데 사용됩니다. 스레드에 대한 pthread_join() 함수는 프로세스에 대한 wait() 함수와 동일합니다. pthread_join에 대한 호출은 첫 번째 인수와 동일한 식별자를 가진 스레드가 종료될 때까지 호출 스레드를 차단합니다.