테스트 및 테스트 및 설정

Test and test-and-set

컴퓨터 과학에서 테스트 및 설정된 CPU 명령멀티프로세서 환경에서 상호 배제를 구현하기 위해 사용됩니다.테스트 앤 세트에서는 올바른 잠금을 구현할 수 있지만, 비지 록에서는 리소스 경합이 발생할 수 있습니다(테스트 앤 세트 조작이 메모리에 아토믹하게 액세스 할 필요가 있는 경우 버스 잠금 및 캐시 무효화에 의해 발생합니다).

오버헤드를 낮추기 위해 보다 정교한 잠금 프로토콜 테스트테스트 및 세트가 사용됩니다.

잠금이 지정된 경우:

boolean locked := false // 공유 잠금 변수

엔트리 프로토콜:

프로시저 EnterCritical() {do { while (locked == true )}을(를) 건너뛰고 (TestAndSet(잠금됨) == true ) // 테스트설정 명령을 사용하여 실제 원자 잠금시도합니다.}

프로토콜 종료:

ExitCritical() 프로시저: = false }

엔트리 프로토콜은 일반 메모리 읽기를 사용하여 잠금이 해제될 때까지 기다립니다.테스트 앤 세트는, 통상의 메모리 판독치에 빈 메모리가 표시되어 있을 때만, 잠금을 취득하려고 합니다.따라서 고가의 원자 메모리 조작은 테스트와 세트를 중심으로 한 단순한 회전보다 덜 자주 발생합니다.

사용된 프로그래밍 언어가 단락 평가를 지원하는 경우 엔트리 프로토콜은 다음과 같이 구현될 수 있습니다.

프로시저 EnterCritical() { while (locked == true 또는 TestAndSet(locked) == true )를 건너뛰고 // 잠길 때까지 회전합니다.}

경고

최적화는 시스템 프로그래밍에서는 유용하지만 제약조건이 불분명하고 잘못 이해된 경우 높은 수준의 동시 프로그래밍에서는 피해야 합니다.잘못된 사용의 예로는 이중 체크 잠금이라고 하는 유사한 관용어가 있습니다.이것은 특별한 주의사항이 없으면 안전하지 않고 [1]안티패턴이 될 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ 데이비드 베이컨 외"더블 체크된 잠금 기능이 고장났습니다" 선언입니다.
  • 그레고리 R.Andrews, Foundations of Multithreaded, Parallel, and Distributed Programming, 페이지 100–101.애디슨 웨슬리, 2000년 ISBN0-201-35752-6.