c 언어 thread 예제

스레딩, 조건 및 시그널링에 대한 표준 함수는 pthread가 할 수 없음을 보장합니다. 스레드는 프로세스에 연결된 작업을 실행하는 작업입니다. 여러 스레드와 스레드를 가질 수 있는 프로세스는 다른 스레드 등을 실행할 수 있습니다. 우선, 우리는 위에서 말했듯이, 그것은 멀티 스레딩 작업을 수행하는 데 필요한 모든 기능을 포함, pthread.h 라이브러리를 포함한다. 그런 다음 sleep() 함수를 포함하는 unistd.h를 포함합니다. 그런 다음 printf()에 대한 stdio.h. /tmp/ccGoGiGt.o: 함수 `main`에서 pthread.c:(.text+0×55): `pthread_create` pthread.c:(.text+0×91)에 대한 정의되지 않은 참조: `pthread_join`에 대한 정의되지 않은 참조또한 명확성을 위해 라이브러리 -lpthread에 대한 링크에 추가해야 합니다. 올바르게 빌드할 수 있습니다. 자세한 내용은 http://www.personal.kent.edu/~rmuhamma/OpSystems/Myos/threads.htm 참조하십시오. 그것은 형식 void *의 스레드 함수 인수이며,이 매개 변수를 사용하여 함수에 필요한 것을 전달할 수 있습니다. 참고: 이 문서의 전체 설명은 Posix 스레드에서 수행됩니다.

형식에서 이해할 수 있는 것처럼 pthread_t 형식은 POSIX 스레드를 의미합니다. 응용 프로그램이 POSIX 스레드가 지원되는지 여부를 테스트하려는 경우 응용 프로그램은 컴파일 시간 테스트를 위해 매크로 _POSIX_THREADS를 사용할 수 있습니다. posix API에 대한 호출이 포함된 코드를 컴파일하려면 컴파일 옵션 `-pthread`를 사용하십시오. 출력에서 볼 수 있듯이 첫 번째 스레드가 만들어지고 처리를 시작한 다음 두 번째 스레드가 생성된 다음 처리를 시작합니다. 여기서 주목해야 할 점은 스레드 실행 순서가 항상 고정되는 것은 아니라는 것입니다. OS 스케줄링 알고리즘에 따라 다릅니다. 스레드 ID로 식별되는 각 스레드입니다. 스레드 ID는 프로세스 ID와 매우 다릅니다.

스레드 ID는 현재 프로세스에서 고유하지만 프로세스 ID는 시스템 전체에서 고유합니다. 프로세스에서 만들 수 있는 최대 스레드 수는 구현에 따라 다릅니다. 스레드가 만들어지면 스레드는 피어이며 다른 스레드를 만들 수 있습니다. 스레드 간에 는 암시적 계층 구조 또는 종속성이 없습니다. 이제 위의 두 함수가 필요한 경우에 대해 물어볼 것입니다. 링크 목록에 다른 스레드에 대한 데이터가 포함된 경우가 있다고 가정합니다. 목록의 모든 노드에는 스레드 ID와 해당 데이터가 포함됩니다. 이제 스레드가 연결된 목록에서 데이터를 가져오려고 할 때마다 먼저 `pthread_self()`를 호출하여 자체 ID를 가져온 다음 모든 노드에서 `pthread_equal()`를 호출하여 노드에 데이터가 포함되어 있는지 확인합니다. 멀티스레딩은 멀티태스킹의 특수 한 형태이며 멀티 태스킹은 컴퓨터가 동시에 두 개 이상의 프로그램을 실행할 수있는 기능입니다. 일반적으로 멀티태스킹에는 프로세스 기반과 스레드 기반의 두 가지 유형이 있습니다.

@steve 안녕하세요 스티브, 당신에게 귀중한 의견을 주셔서 감사합니다. 당신이 통지에 가져 온 두 가지 포인트는 리눅스 스레드의 진행 중인 시리즈의 다음 부분에서 다룰 것입니다. 이 부분은 스레드가 어떻게 살아 있는지에 대한 작은 개요를 제공하기위한 것이었기 때문에 의도적으로 `pthread_exit()`와이 부분의 `sleep()` 함수에 집중하지 않았습니다. 후속 부분은 레이어를 벗겨내고 `pthread_exit()`와 sleep()을 사용하지 않아야 하는 이유 등을 포함한 더 깊은 측면에 초점을 맞출 것입니다. int pthread_create(pthread_t *제한 tidp, const pthread_attr_t *제한 attr, void *(*start_rtn)(void), 보이드 *제한 아르그] int main(int argc, char * argv[]){{sain*retal* retval; retval=4 pthread_t tid; pthread_attr_t attr; pthread_attr_init(&attr); pthread_create (&tid,&attr,func,&argv[1]); pthread_join (tid, (void **)&retval); printf(“retval은 %dn”, *retval입니다); } 동시에 한 대상에서 여러 작업을 수행하는 것은 매우 위험하며, 내가 줄 수있는 가장 좋은 예는 데이터베이스에 대한 것입니다.

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。