나는 최근에 약간의 문헌을 읽었으며 다소 흥미로운 데이터 구조를 발견했습니다.
업데이트 시간을 최악의 업데이트 시간 [1-7]으로 낮추는 다양한 방법을 연구했습니다 .
최근에는 효율적인 동시 액세스를 지원하기 위해 잠금없는 데이터 구조를 살펴보기 시작했습니다.
잠금이없는 데이터 구조의 구현 에 이러한 최악의 경우 업데이트 시간 기술이 사용 되었습니까?
나는 왜 냐고 묻습니다. 나에게 그들은이 "이론적 향상"의 실질적인 확장처럼 보인다.
나는 최근에 약간의 문헌을 읽었으며 다소 흥미로운 데이터 구조를 발견했습니다.
업데이트 시간을 최악의 업데이트 시간 [1-7]으로 낮추는 다양한 방법을 연구했습니다 .
최근에는 효율적인 동시 액세스를 지원하기 위해 잠금없는 데이터 구조를 살펴보기 시작했습니다.
잠금이없는 데이터 구조의 구현 에 이러한 최악의 경우 업데이트 시간 기술이 사용 되었습니까?
나는 왜 냐고 묻습니다. 나에게 그들은이 "이론적 향상"의 실질적인 확장처럼 보인다.
답변:
자체로는 도움이되지 않습니다. 잠금이없는 데이터 구조에는 데이터 구조가 변경 될 때 단일 원자 인스턴스가 있어야합니다. 모든표현 불변량은 그 원자 순간 직전과 직후에 효력을 발휘할 필요가있다.
즉, 데이터 구조를 수정하는 경우 중요한 특징은 개인 데이터 구조에 대해 모든 모드를 수행 한 다음 단일 원자 명령어로 수정을 교체 할 수 있다는 것입니다.
잠금 해제는 일반적으로 데이터 구조가 변경 불가능한 경우 ( 순전히 기능적 ) 가장 쉽습니다 . 데이터 구조의 현재 버전에 대한 전역 포인터를 유지하기 만하면됩니다. 독자는 아무것도 잠글 필요가 없습니다. 데이터 구조에 대한 수정은 전역 포인터를 하나의 불변 데이터 구조로 바꾸고 다른 것으로 바꿈으로써 수행됩니다.
예를 들어, 순전히 기능적인 트리 밸런스 트리가 있다면 :
가장 중요한 부분은 표현 불변성을 유지해야 할 필요에 대해 위에서 말한 것입니다. 일반적으로 트리 중간에서 원자 적으로 변경하는 알고리즘을 갖는 것만으로는 충분하지 않습니다. 왜? 예를 들어, 트리의 사전 순서 순회를 수행하는 리더 스레드가있을 수 있습니다. 현재 읽고있는 노드의 조상 인 노드를 수정하면 강제로 생각한 전제 조건을 무효화합니다. 독자는 변경하기 전과 똑같이 또는 변경 후와 동일한 방식으로 데이터 구조를 처리 할 수 있어야합니다. 사이에 뭔가가 없습니다.
while ( !P ) { noOp(); } doWork();
경우 noOp
수 있습니다 sleep
또는 유사한.
Copy
단계를 원 자성 으로 만드는 방법은 무엇입니까? 의 또 다른 어려운 문제인 것 같습니다 atomic snapshot
.