java 다중 루틴 자물쇠 상세 및 간단한 실례

java 다중 스레드 잠금
프로그래밍 경험이 많은 친구들은 자물쇠가 끊어지는 고생을 했다고 믿는다.네가 다중 라인을 사용하지 않으면, 자물쇠가 사라질 가능성이 계속 존재할 것이다.왜 자물쇠가 사라졌을까?나는 원인은 주로 다음과 같은 몇 가지 측면이 있다고 생각한다.
(1) 개인의 자물쇠 사용 경험 차이
(2) 모듈 사용 자물쇠의 차이
(3) 버전 간 차이
(4) 분기 간의 차이
(5) 코드 수정과 재구성 코드의 차이
어떤 원인이든 자물쇠의 위기는 존재한다.그렇다면 통상적으로 나타나는 자물쇠는 어떤 것들이 있을까?우리는 하나하나 볼 수 있지만,
(1) 잠금 해제 잊음

void data_process() 
{ 
  EnterCriticalSection(); 
 
  if(/* error happens */) 
    return; 
 
  LeaveCriticalSection(); 
} 
(2) 단일 스레드 중복 요청 잠금

void sub_func() 
{ 
  EnterCriticalSection(); 
  do_something(); 
  LeaveCriticalSection(); 
} 
 
void data_process() 
{ 
  EnterCriticalSection(); 
  sub_func(); 
  LeaveCriticalSection(); 
} 
(3) 이중 스레드 다중 잠금 신청

void data_process1() 
{ 
  EnterCriticalSection(&cs1); 
  EnterCriticalSection(&cs2); 
  do_something1(); 
  LeaveCriticalSection(&cs2); 
  LeaveCriticalSection(&cs1); 
} 
 
void data_process2() 
{ 
  EnterCriticalSection(&cs2); 
  EnterCriticalSection(&cs1); 
  do_something2(); 
  LeaveCriticalSection(&cs1); 
  LeaveCriticalSection(&cs2); 
} 
(4) 고리형 자물쇠 신청

/* 
*       A  - B 
*       |   | 
*       C  - D 
*/ 
A, B, C, D 네 사람이 함께 밥을 먹는다고 가정하면 사람마다 좌우에 젓가락이 하나씩 있다.그래서 이 중 한 사람이 밥을 먹고 싶다면 먼저 왼쪽 젓가락을 들고 오른쪽 젓가락을 들어야 한다.이제 우리는 모든 사람들로 하여금 동시에 밥을 먹기 시작하게 한다.그렇다면 이런 상황이 발생할 가능성이 높다.모두 왼쪽 젓가락을 들었거나 오른쪽 젓가락을 들었습니다. 밥을 먹기 위해 그들은 지금 다른 젓가락을 기다리고 있습니다.이때 모든 사람은 밥을 먹고 싶고, 동시에 모든 사람은 자신이 이미 얻은 젓가락을 포기하고 싶지 않다.그래서 사실 다들 밥을 못 먹어요.
요약:
(1) 자물쇠의 위험은 시종 존재하지만, 우리는 이런 위해가 존재하는 범위를 최대한 줄여야 한다
(2) 사라진 자물쇠를 해결하는 데 드는 대가가 매우 비싸다
(3) 가장 좋은 자물쇠 처리 방법은 프로그램을 작성할 때 가능한 한 자물쇠를 검출하는 것이다
(4) 다선정은 양날의 검으로 효율이 높아지면 당연히 자물쇠가 사라질 위험이 있다
(5) 어떤 프로그램의 자물쇠는 용인할 수 있고 기계를 다시 켤 수는 없지만 어떤 프로그램은 안 된다
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기