INNENTÜREN, TUNING DESIGN TÜREN aus Slowenien.


  • Ljubljana


    0038651 - 660 - 406

  • Ptuj


    0038651 - 316 - 130
    0038631 - 688 - 777

c언어 thread pool 예제

c언어 thread pool 예제

세마포어는 스레드가 무언가를 기다릴 때도 유용합니다. 값이 0인 세마포에 스레드 호출 sem_wait()를 두면 스레드가 계속될 준비가 되면 세마포를 다른 스레드로 증가시켜 이 작업을 수행할 수 있습니다. C++11 스레딩 프리미티브는 여전히 상대적으로 낮은 수준입니다. 스레드 풀과 같은 상위 수준 구문 생성을 작성하는 데 사용할 수 있습니다. 생성할 데이터가 있으며 실행할 수 있다면 소비자 스레드를 깨울 수 있으며 모든 것이 좋을 것입니다. 불행히도 가장 먼저 하는 일은 이진 뮤텍스 세마포에 sem_wait(&mutex;)를 호출하는 것입니다. 잠금이 이미 유지되어 있습니다. 따라서, 생산자는 지금 너무 기다리고 붙어있다. 주 스레드가 사용자를 계속 서비스하는 동안 편집 중인 데이터 파일의 백업 복사본을 스풀로 만드는 두 번째 스레드를 만들 수 있다고 가정합니다. 백업이 완료되면 두 번째 스레드가 종료될 수 있으며 주 스레드를 조인할 필요가 없습니다. 우리는 우리가 조인을 기다리고있는 스레드의 식별자와 결과에 대한 포인터를 전달합니다.

이 함수는 다른 스레드가 반환되기 전에 종료될 때까지 기다립니다. 그런 다음 스레드에서 반환 값을 인쇄합니다. 이 코드에서는 스레드 간의 통신을 추가했습니다. 스레드 간의 통신을 보여 주기 위해 공유 메모리를 선택했습니다. 동일한 프로그램의 스레드는 공유 개체에서 전역 변수 또는 호출 메서드를 참조할 수 있으므로 서로 다른 프로세스의 스레드는 커널 루틴을 호출하여 동일한 커널 개체에 액세스할 수 있습니다. 예를 들어 소비자 스레드가 먼저 실행되는 경우를 가정해 보겠습니다. get()을 호출하여 아직 생성되지 않은 데이터를 수집하여 원하는 대로 작동하지 않습니다. 사용 또는 채우기 인덱스의 업데이트에 경합 조건이 있을 수 있으므로 여러 생산자 또는 소비자를 추가하면 상황이 악화됩니다. 5의 parm을 사용하는 예제의 경우 MAX가 5 이상이어야 합니다. 【말】 #define MAX 15】 모든 함수는 이전에 선언된 개체에 대한 포인터를 취합니다(이 경우 pthread_mutex_t). 추가 특성 매개 변수 pthread_mutex_init을 사용하면 해당 동작을 제어하는 뮤텍스에 대한 특성을 제공할 수 있습니다. 호출 pthread_spin_init()입니다.

스핀 잠금을 초기화합니다. 스핀 잠금은 프로세스 간에 공유하거나 프로세스를 만든 프로세스에 비공개로 공유할 수 있습니다. PTHREAD_PROCESS_PRIVATE 값을 pthread_spin_init()에 전달하면 스핀 잠금을 공유할 수 없습니다. 공유할 수 있도록 하려면 PTHREAD_PROCESS_SHARED 값을 전달해야 합니다. 기본값은 비공개로 설정됩니다. 다중 스레딩 코드의 주요 장점은 모든 스레드가 동일한 메모리를 볼 수 있다는 것입니다. 따라서 데이터는 이미 스레드 간에 공유됩니다. 그러나 데이터에 대한 액세스를 조정하지 못하면 데이터 리세스와 같은 이유로 인해 잘못된 결과가 발생할 수 있습니다. 뮤텍스 잠금은 데이터 공유 방법을 동기화하는 방법 중 하나입니다. 다음은 pthread_join(): 다중 스레드를 사용하여 정렬 병합을 사용하는 샘플 코드입니다.

fork() 시스템 호출은 새 시스템 프로세스 ID가 있는 경우를 제외하고 부모와 동일한 프로세스인 새 자식 프로세스를 생성합니다. 프로세스는 부모로부터 메모리에 복사되고 커널에 의해 새 프로세스 구조가 할당됩니다. 함수의 반환 값은 실행의 두 스레드를 구별하는 값입니다. 자식 프로세스의 포크 함수에 의해 0이 반환됩니다. 이 동작이 있는 스레드를 만들 수 있습니다. 분리된 스레드라고 하며 스레드 특성을 수정하거나 pthread_detach()를 호출하여 스레드를 만들 수 있습니다. 더 나은 성능 새 스레드를 만들 필요가 없기 때문에 시간을 절약합니다. 뮤텍스 잠금과 스핀 잠금의 차이점은 스핀 잠금을 획득하기 위해 기다리는 스레드가 잠자는 동안 잠금을 획득하려고 계속 시도하고 마지막으로 잠금을 획득할 때까지 프로세서 리소스를 소비한다는 것입니다. 반대로, 뮤텍스 잠금은 잠금을 획득할 수 없는 경우 절전 모드로 잠들어 있을 수 있습니다.