c언어 쓰레드 풀 예제
2 agosto, 2019아래에 붙여 넣기내가 사용한 완성된 프로그램입니다. 그리고 다시 당신의 예는 잘 수행하고 난이 기능에 대해 신속하게 배울 필요가 그냥. 감사합니다 작업자 (스레드)는 풀에 새로운 작업이있는 것처럼 자동으로 작업을 시작합니다. 계속하기 전에 추가된 모든 작업이 완료될 때까지 기다리려면 thpool_wait(thpool)를 사용할 수 있습니다. 당신이 풀을 파괴하려는 경우 당신은 thpool_destroy (thpool);를 사용할 수 있습니다. 조건 변수의 본질은 “신호 및 대기”입니다. 신호 연은 대기 중인 스레드에 대한 공유 변수의 상태 변경 알림입니다. 대기 작업은 이러한 알림이 수신될 때까지 차단하는 방법입니다. 아래 출력은 모든 스레드가 도착하고 떠나는 것을 보여줍니다.
다음은 pthread_join(): 다중 스레드를 사용하여 정렬 병합을 사용하는 샘플 코드입니다. Java 스레드 풀은 작업을 기다리고 여러 번 다시 사용하는 작업자 스레드 그룹을 나타냅니다. 예제 패키지는 유용하지만 응용 프로그램에는 동기화 메서드 중 하나로서 장벽이 스레드 그룹이나 프로세스그룹에 중지되어야 하며 다른 모든 기능이 있을 때까지 진행할 수 없음과 같이 여기에 누락된 일부 기능이 필요할 수 있습니다. 스레드/프로세스가 이 장벽에 도달합니다. 여기서는 해당 구성에서 참여 프로세스/스레드 집합을 정적으로 정의하는 고전적인 장벽을 해결합니다. 이 작업은 일반적으로 프로그램 시작 시 또는 Pthreads 장벽과 같은 장벽이 인스턴스화될 때 수행됩니다. main()에서는 두 스레드를 생성하고 스레드가 완료될 때까지 기다립니다. 나중에 스레드를 참조하는 데 사용할 수 있는 pthread_t 개체의 주소를 전달하고 있습니다. 스레드 특성의 경우 기본값을 수정하지 않으려므로 NULL을 전달합니다. 포인터를 무효화하는 인수로 무효화하고 pthread_create()에 필요한 void에 대한 포인터를 반환합니다. 호출이 성공하면 두 개의 스레드가 실행됩니다.
원래 스레드(main)가 계속되어 pthread_create()이 지나면 코드를 실행하고 새 스레드가 thread_fnc()에서 실행하기 시작합니다. 스핀 잠금을 사용하는 장점은 잠금이 해제되는 즉시 잠금을 획득하는 반면 뮤텍스 잠금은 잠금을 얻기 전에 OS에서 깨어나야한다는 것입니다. 단점은 스핀 잠금이 해당 리소스를 독점하는 가상 CPU에서 회전하지만 뮤텍스 잠금은 절전 모드로 되어 다른 스레드가 사용할 수 있도록 CPU를 해제한다는 것입니다. 따라서 실제로 뮤텍스 잠금은 종종 스핀 잠금과 보다 전통적인 뮤텍스 잠금의 하이브리드로 구현됩니다. 이러한 종류의 뮤텍스를 어댑티브 뮤텍스 잠금이라고 합니다. C++11 스레딩 프리미티브는 여전히 상대적으로 낮은 수준입니다. 스레드 풀과 같은 상위 수준 구문 작성에 사용할 수 있습니다. fork() 시스템 호출은 새 시스템 프로세스 ID가 있는 경우를 제외하고 부모와 동일한 프로세스인 새 자식 프로세스를 생성합니다. 프로세스는 부모로부터 메모리에 복사되고 커널에 의해 새 프로세스 구조가 할당됩니다.
함수의 반환 값은 실행의 두 스레드를 구별하는 값입니다. 자식 프로세스의 포크 함수에 의해 0이 반환됩니다. 스레드 두 개, 생산자 1개, 소비자 1개를 가정해 보습니다. 소비자가 먼저 실행됩니다. 뮤텍스를 획득한 다음 전체 세마포에서 sem_wait()를 호출합니다. 아직 데이터가 없기 때문에 이 호출을 통해 소비자가 차단되어 CPU를 생성합니다. 중요한 것은, 그래도, 소비자는 여전히 잠금을 보유하고!. 우리는 스레드가 그것을 만들 때 호출하는 함수에 대한 프로토 타입을 선언합니다 : main() 에서 새 스레드를 만든 후 텍스트로 읽고 전역인 my_string에 넣고 sem_post()로 세마포를 증가시킴) : 모든 함수는 pr에 대한 포인터를 취합니다.
이 경우 pthread_mutex_t를 선언했습니다.