2 Agosto 2019

크리티컬 섹션 예제

병렬 프로그래밍에서 코드는 스레드로 나뉩니다. 읽기-쓰기 충돌 변수는 스레드 간에 분할되며 각 스레드에는 복사본이 있습니다. 연결된 목록, 트리, 해시 테이블 등과 같은 데이터 구조에는 스레드 간에 분할할 수 없는 데이터 변수가 있으므로 병렬 처리구현이 매우 어렵습니다. [6] 데이터 구조 구현의 효율성을 향상시키기 위해 삽입, 삭제, 검색과 같은 여러 작업을 병렬로 실행해야 합니다. 이러한 작업을 수행하는 동안 한 스레드에서 동일한 요소를 검색하고 다른 스레드에서 삭제되는 시나리오가 있을 수 있습니다. 이러한 경우 출력이 잘못될 수 있습니다. 요소를 검색하는 스레드는 적중했을 수 있지만 다른 스레드는 해당 시간 직후에 삭제할 수 있습니다. 이러한 시나리오는 잘못된 데이터를 제공하여 실행 중인 프로그램에서 문제를 일으킵니다. 이를 방지하기 위해 한 가지 방법은 전체 데이터 구조를 중요한 섹션 아래에 보관하여 한 번에 하나의 작업만 처리하도록 하는 것입니다.

다른 방법은 다른 작업이 동일한 노드를 사용하지 않도록 중요한 섹션에서 사용 중인 노드를 잠그는 것입니다. 따라서 임계 섹션을 사용하면 코드가 예상출력을 제공합니다. [6] 간단한 용어로 중요한 섹션은 리소스(파일, 입력 또는 출력 포트, 전역 데이터 등)에 액세스하는 것과 같이 원자적으로 실행되어야 하는 명령/문 또는 코드 영역 그룹입니다(원자성을 위해 이 게시물을 읽으십시오). 임계 섹션은 일반적으로 유한 한 시간에 종료됩니다[2] 스레드, 작업 또는 프로세스는 고정 된 시간 (경계 대기)를 입력 할 때까지 기다려야합니다. 중요한 섹션을 단독으로 사용하려면 프로그램의 출입시 일부 동기화 메커니즘이 필요합니다. 상호 배제는 언제든지 하나의 프로세스만 임계 섹션 내에 있을 수 있음을 의미합니다. 다른 프로세스에 임계 섹션이 필요한 경우 무료가 될 때까지 기다려야 합니다. 이와 같은 경우에는 중요한 부분이 중요합니다. 위의 경우 A가 `x`의 업데이트된 값을 읽어야 하는 경우 프로세스 A와 프로세스 B를 동시에 실행하면 필요한 결과가 생성되지 않을 수 있습니다.

Contact us

Get in touch with us!