나는 다소 혼란 스러웠 기 때문에 질문에서 몇 가지 개념을 명확하게 설명하는 것으로 시작합니다.
수집 . 데이터 구조에서 일반적으로 일어나는 일을 간단히 요청할 수있을 때 "수집"의 의미를 엄격하게 정의하는 데 시간을 할애 할 이유가 없습니다. 데이터 구조는 하나의 메모리를 차지하며 해당 메모리에 액세스 할 수 있고 사용자 가 호출 할 수있는 일부 작업 이 있습니다 . 이러한 사용자는 별개의 프로세서 일 수도 있고 다른 스레드 일 수도 있지만 걱정하지 않아도됩니다. 중요한 것은 작업을 병렬로 실행할 수 있다는 것입니다.
잠금이없는 . Herlihy와 Boss 는 충돌하는 사용자가 데이터 구조의 추가 사용을 막지 않으면 데이터 구조에 잠금이 없다고 말합니다. 예를 들어, 정렬 된 세트에 노드를 삽입하는 도중에 프로세서에 물을 붓는다 고 가정하십시오. 다른 프로세서가 나중에 해당 정렬 세트에 삽입하려고하면 성공해야합니다. ( 편집 : 이 정의에 의하면, 데이터 구조가 사용 잠금 후 잠금 부담하지 않으면 그 경우이지만이다 하지 데이터 구조는 잠금을 사용하지 않는 경우는 로크 무료 인 경우).
이러한 정의를 통해 Herlihy와 Boss는 기본적으로 중요한 지역을 거래로 전환하는 것이라고 대답합니다.
그러나 당신은 이것이 복잡할까요? 나는 그 질문이 의미가 있는지 확신하지 못한다. 고려하십시오 push(x) { lock(); stack[size++] = x; unlock(); }
. 이것이 일정한 시간 작동입니까? 잠금 작업을 무시하고 다른 사용자가 있으면 예라고 대답 할 수 있습니다. 다른 사용자를 무시하지 않으려면 푸시 가 일정한 시간에 실행 될지 여부를 실제로 말할 방법이 없습니다 . 한 수준 위로 올라가 특정 알고리즘에서 스택이 어떻게 사용되는지 볼 경우 푸시 는 항상 일정한 시간이 걸린다고 말할 수 있습니다 (병렬 알고리즘의 입력으로 발생하는 모든 측면에서 측정 됨). 그러나 이것은 실제로 알고리즘의 속성이므로 푸시 가 일정한 시간 작업 이라고 말하는 것은 합리적이지 않습니다 .
요약하면, 작업을 실행하는 사용자가 다른 사용자를 기다리는 정도를 무시하면 중요 지역 대신 트랜잭션을 사용하여 질문에 긍정적으로 대답합니다. 대기 시간을 무시하지 않으면 데이터 구조가 어떻게 사용되는지 살펴 봐야합니다.