>  Q&A  >  본문

java - 읽기-쓰기 잠금의 쓰기 잠금 성능 저하 문제

쓰기 잠금이 다운그레이드되면 현재 쓰기 잠금을 획득한 스레드는 쓰기 잠금을 유지한 다음 읽기 잠금을 획득한 다음 쓰기 잠금을 해제해야 합니다.

그렇다면 쓰기 잠금을 유지해야 하는 이유는 무엇인가요? ?

위 그림에는 "그러면 현재 스레드가 스레드 T의 데이터 업데이트를 감지할 수 없습니다"라고 나와 있습니다. 이를 이해하는 방법은 다음과 같습니다. 스레드 T가 쓰기 잠금을 획득한 후 데이터를 업데이트하면 현재 스레드는 쓰기 잠금이 해제되기 전에 데이터 업데이트를 인식할 수 없습니다. 그러나 일단 스레드 T가 쓰기 잠금을 해제하면 현재 스레드는 다음과 같은 느낌을 받을 수 있습니다. 여기서는 이해하는데 문제가 없을 것입니다.

설명을 도와주세요, 감사합니다

大家讲道理大家讲道理2686일 전1158

모든 응답(3)나는 대답할 것이다

  • 習慣沉默

    習慣沉默2017-06-12 09:26:17

    잠금 다운그레이드에 대해 설명하는 것입니다. 먼저 쓰기 잠금은 배타적이며, 읽기 잠금은 공유되며, 읽기 및 쓰기 잠금은 스레드 간에 상호 배타적입니다. 잠금 다운그레이드의 전제는 모든 스레드가 데이터에 민감하기를 원한다는 것입니다. 변경되지만 쓰기 때문에 잠금이 하나만 있으므로 성능 저하가 발생합니다.
    쓰기 잠금을 먼저 해제한 후 읽기 잠금을 획득하면 다른 스레드가 쓰기 잠금을 획득하기 전에 획득하여 읽기 잠금 획득을 차단할 수 있으며 데이터 변경 사항을 감지할 수 없게 됩니다. 따라서 데이터가 변경되지 않도록 먼저 쓰기 잠금을 유지하고 읽기 잠금을 획득한 다음 쓰기 잠금을 해제해야 합니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:26:17

    쓰기 잠금은 다른 프로세스가 읽고 쓰는 작업을 허용하지 않는 반면, 읽기 잠금은 읽기 작업을 허용합니다.
    캡처한 예에 따르면 쓰기 잠금을 해제하면 T 프로세스가 쓰기 잠금을 획득합니다. 이때는 읽기 잠금을 획득할 수 없으므로 먼저 읽기 잠금을 획득한 후 쓰기 잠금을 해제해야 합니다.

    먼저 읽기-쓰기 잠금의 의미를 이해하지 못하셨습니다. 읽기 잠금이 있다는 것은 다른 쓰기 작업이 허용되지 않는다는 의미입니다.
    제공하신 예에 따르면 작업이 다른 스레드에 의해 중단되는 것을 원하지 않는 트랜잭션 스레드가 있을 수 있으며, 이 트랜잭션 작업은 여러 부분으로 나누어 다른 데이터(또는 테이블)를 업데이트하거나 시간이 많이 걸릴 수도 있습니다. -태워 버리는. 쓰기 잠금을 장기간 독점적으로 사용하는 경우 일부 고응답 애플리케이션에서는 허용되지 않으므로 일부 쓰기 작업을 완료한 후 읽기 잠금을 다운그레이드하여 다른 프로세스의 읽기 작업에 대한 응답을 허용합니다. 잠금은 모든 거래가 완료된 후에만 해제됩니다.
    여러분이 이해한 바에 따르면, 쓰기 잠금이 다른 스레드에 의해 점유된 경우 트랜잭션 스레드는 중단되고 다른 쓰기 잠금이 해제될 때까지 기다려야 합니다.

    회신하다
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-12 09:26:17

    "그러면 현재 스레드는 스레드 T의 데이터 업데이트를 인식할 수 없습니다."

    T1이 데이터를 읽으면 데이터 값이 현재 스레드의 컨텍스트에 복사되므로 다른 스레드는 데이터가 업데이트되었는지 여부를 감지할 방법이 없습니다. 데이터가 메모리, 즉 힙에 제출되는 한 다른 스레드는 최신 값을 얻을 수 있습니다.

    회신하다
    0
  • 취소회신하다