race condition 예제

여기서 는 실제 프로덕션 시스템에서와 같이 sleep()을 사용하여 약간의 지연을 시뮬레이션하며 많은 프로세스가 실행중일 수 있으며 많은 사용자가 지정된 시간에 동일한 응용 프로그램에 액세스하고 있을 수 있습니다. 이러한 종류의 시나리오에서는 CPU 주기를 위해 경쟁하는 스레드 간에 컨텍스트 전환이 언제 일어날지 확신할 수 없습니다. 그렇기 때문에 레이스 조건 관련 버그를 찾기가 매우 어려서 레이스 조건 관련 오류를 재현하려고 할 때 컨텍스트 전환이 발생하지 않을 수 있으므로 버그를 재현하지 못할 수도 있습니다. 인종 조건은 가장 일반적으로 컴퓨터 과학과 관련이 있습니다. 컴퓨터 메모리 또는 저장소에서 많은 양의 데이터를 읽고 쓰는 명령이 거의 동일한 순간에 수신되고 이전 데이터를 읽는 동안 컴퓨터가 이전 데이터의 일부 또는 전부를 덮어쓰려고 하면 경합 조건이 발생할 수 있습니다. 컴퓨터 충돌, “불법 작업”, 프로그램의 알림 및 종료, 이전 데이터를 읽는 오류 또는 새 데이터를 작성하는 오류 중 하나 이상이 될 수 있습니다. 지침이 잘못된 순서로 처리되는 경우에도 경합 조건이 발생할 수 있습니다. 생명에 중요한 시스템의 소프트웨어 결함은 재앙이 될 수 있습니다. 인종 조건은 Therac-25 방사선 치료 기계의 결함 중 하나였으며, 이는 적어도 3 명의 환자와 여러 명의 부상으로 이어졌습니다. [17] 또 다른 예는 GE 에너지가 제공하고 오하이오에 본사를 둔 FirstEnergy Corp (다른 전력 시설 중)에서 사용하는 에너지 관리 시스템입니다. 경보 하위 시스템에 는 경합 조건이 존재했습니다. 세 개의 처진 전력선이 동시에 트립되면 경고가 모니터링 기술자에게 제기되지 않도록 하여 문제에 대한 인식이 지연되었습니다. 이 소프트웨어 결함은 결국 2003 년 북미 정전으로 이어졌다.

[18] GE Energy는 나중에 이전에 발견되지 않은 오류를 수정하기 위한 소프트웨어 패치를 개발했습니다. 응용 프로그램이 제대로 작동하기 위한 프로세스 또는 스레드의 순서 또는 타이밍에 따라 달라질 때 소프트웨어에서 경합 조건이 발생합니다. 전자 장치와 마찬가지로 잘못된 실행 및 버그를 초래하는 중요한 경합 조건이 있습니다. 중요한 경합 조건은 프로세스 또는 스레드가 일부 공유 상태에 종속될 때 종종 발생합니다. 공유 상태의 작업은 상호 배타적이어야 하는 중요한 섹션입니다. 이 규칙을 준수하지 않으면 공유 상태가 손상될 가능성이 높아집니다. 이 예제에서 비트의 값은 0이어야 할 때 끝 값이 1입니다. 프로세스 2가 프로세스 1이 동시 비트 대반전을 수행하고 있음을 인식하지 못하기 때문에 이 현상이 발생합니다. 간단한 예로 두 스레드가 전역 정수 변수의 값을 하나씩 증분하려고 한다고 가정해 보겠습니다. 이상적으로는 다음과 같은 작업 순서가 수행됩니다: 경합 조건은 하드웨어 난수 생성기 및 물리적으로 클론할 수 없는 함수를 만드는 데도 의도적으로 사용됩니다. [16] [인용 필요] FF는 노드에 동일한 경로를 가진 회로 토폴로지를 설계하고 제조 변형에 의존하여 먼저 완료할 경로를 임의로 결정하여 생성할 수 있습니다.

This entry was posted in Uncategorized. Bookmark the permalink.

Comments are closed.