c언어 thread pool 예제

주 스레드가 사용자를 계속 서비스하는 동안 편집 중인 데이터 파일의 백업 복사본을 스풀로 만드는 두 번째 스레드를 만들 수 있다고 가정합니다. 백업이 완료되면 두 번째 스레드가 종료될 수 있으며 주 스레드를 조인할 필요가 없습니다. 그런 다음 생산자가 실행됩니다. 생성할 데이터가 있으며 실행할 수 있다면 소비자 스레드를 깨울 수 있으며 모든 것이 좋을 것입니다. 불행히도 가장 먼저 하는 일은 이진 뮤텍스 세마포에 sem_wait(&mutex;)를 호출하는 것입니다. 잠금이 이미 유지되어 있습니다. 따라서, 생산자는 지금 너무 기다리고 붙어있다. tasks.start(10)를 실행하여 스레드를 만듭니다(10개의 스레드가 시작됩니다). 아래 코드는 뮤텍스와 액세스를 동기화하는 또 다른 예를 보여줍니다. 액세스를 제어하기 위해 코드 섹션을 입력하기 전에 뮤텍스를 잠근 다음 완료되면 잠금을 해제합니다.

스레드 풀의 경우 고정 된 크기의 스레드 그룹이 만들어집니다. 스레드 풀의 스레드가 당겨지고 서비스 공급자가 작업을 할당합니다. 작업이 완료되면 스레드가 스레드 풀에 다시 포함됩니다. 데이터에 대한 스레드 액세스를 제어하여 동기화를 구현할 수 있지만 조건 변수를 사용하면 스레드가 실제 데이터 값에 따라 동기화할 수 있습니다. 그 결과 다중 스레드 프로그램에서 일반적으로 사용되는 패턴인 간단하고 작업된 바인딩된 버퍼가 생성됩니다. 뮤텍스는 기본적으로 프로세스 간에 공유되지 않습니다. pTHREAD_mutexattr_setpshared() 값을 사용하여 호출하여 PTHREAD_PROCESS_PRIVATE을 호출하여 속성을 기본값으로 복원합니다. 세마포어는 스레드가 무언가를 기다릴 때도 유용합니다. 값이 0인 세마포에 스레드 호출 sem_wait()를 두면 스레드가 계속될 준비가 되면 세마포를 다른 스레드로 증가시켜 이 작업을 수행할 수 있습니다. 모든 함수는 이전에 선언된 개체에 대한 포인터를 취합니다(이 경우 pthread_mutex_t).

추가 특성 매개 변수 pthread_mutex_init을 사용하면 해당 동작을 제어하는 뮤텍스에 대한 특성을 제공할 수 있습니다. 종료하지 않으려면 문자를 계산한 다음 첫 번째 문자를 null로 자프합니다.