c언어 쓰레드 풀 예제

출력은 다음과 같아야 합니다. 이 출력에서 thread2는 먼저 printf()에 도착합니다. Java 스레드 풀은 작업을 기다리고 여러 번 다시 사용하는 작업자 스레드 그룹을 나타냅니다. 조건 변수를 사용하면 스레드가 상태 변경과 통신할 수 있습니다. 즉, 조건 변수를 사용하면 한 스레드가 공유 리소스의 상태의 변경 내용을 다른 스레드에 알리고 다른 스레드가 이러한 알림을 기다릴 수 있습니다. 다른 스레드가 일부 조건이 발생했기 때문에 응답해야 한다는 신호를 표시할 때까지 스레드가 절전 모드(대기)할 수 있습니다. 조건 변수가 없으면 대기 중이면 조건이 true인지 여부를 확인하기 위해 폴링을 수행해야 합니다. 이 함수는 원자적으로 세마포의 값을 1로 감소하지만 세마포가 영하지 않은 카운트를 먼저 가지는 때까지 항상 기다립니다. 따라서 값이 2인 세마포에서 sem_wait를 호출하면 스레드가 계속 실행되지만 세마포는 1로 줄어듭니다. 값이 0인 세마포어에서 호출하면 함수는 다른 스레드가 값을 증가하여 더 이상 0이 되지 않을 때까지 기다립니다. 두 스레드가 모두 sem_wait에서 동일한 세마포가 0이 될 때까지 대기하고 세 번째 프로세스에 의해 한 번 증분되는 경우 두 대기 프로세스 중 하나만 세마포를 줄이고 다른 스레드가 대기 상태로 유지되는 동안 계속됩니다. 컨테이너가 요청을 처리하는 스레드 풀을 만드는 Servlet 및 JSP에서 사용됩니다. 그 결과 다중 스레드 프로그램에서 일반적으로 사용되는 패턴인 간단하고 작업된 바인딩된 버퍼가 생성됩니다.

뮤텍스 잠금과 스핀 잠금의 차이점은 스핀 잠금을 획득하기 위해 기다리는 스레드가 잠자는 동안 잠금을 획득하려고 계속 시도하고 마지막으로 잠금을 획득할 때까지 프로세서 리소스를 소비한다는 것입니다. 반대로, 뮤텍스 잠금은 잠금을 획득할 수 없는 경우 절전 모드로 잠들어 있을 수 있습니다. 그러나 정상적인 뮤텍스 구현에서 multex 잠금은 뮤텍스를 얻을 수 없을 때 즉시 스레드를 절전 모드로 연결합니다. 스레드 풀의 경우 고정 된 크기의 스레드 그룹이 만들어집니다. 스레드 풀의 스레드가 당겨지고 서비스 공급자가 작업을 할당합니다. 작업이 완료되면 스레드가 스레드 풀에 다시 포함됩니다. 다음 코드는 정수의 합계를 1에서 100으로 계산합니다. 5개의 스레드는 각각 20개의 정수를 처리합니다. 정수의 각 집합은 우리가 threadWork() 함수에 전달하는 인수로 구분됩니다.

뮤텍스 잠금은 한 번에 하나의 스레드에서만 획득할 수 있는 메커니즘입니다. 다른 스레드가 동일한 뮤텍스를 얻으려면 뮤텍스의 현재 소유자가 해제할 때까지 기다려야 합니다. pthread_spin_lock()에 대한 호출은 잠금이 획득될 때까지 회전하고 pthread_spin_unlock()에 대한 호출은 잠금을 해제합니다. 호출 pthread_spin_destroy()는 잠금에 사용되는 모든 리소스를 해제합니다. 하나 이상의 생산자 스레드와 하나 이상의 소비자 스레드를 가정합니다. 생산자는 데이터 항목을 생성하고 버퍼에 배치하려고 합니다. 그런 다음 소비자는 버퍼에서 데이터 항목을 잡아 어떤 식으로든 데이터를 소비합니다. 아래 예제에서는 0 또는 1이 걸리는 이진 세마포를 사용합니다. 세마포의 더 일반적인 유형이있다, 값의 넓은 범위를 소요 계산 세마포. 세마포어는 지정된 시간에 하나의 스레드만 실행할 수 있도록 코드 섹션을 보호하는 데 사용됩니다. 이러한 종류의 작업을 수행하려면 이진 세마포가 필요합니다.