2017-03-15 2 views
1

단일 링크 된 목록을 사용하여 멀티 스레딩에서 rw-locks이 얼마나 정확하게 작동하는지에 대한 질문이 있습니다. Pitcure에있는 모든 시나리오의RW 잠금을 사용하는 다중 스레드에서 Del. 및 r/w 링크 목록 노드 -> 교착 상태?

첫째 :

Head ==> A ==> B ==> C ==> Tail 
       ^ 
        | | 
        | ----------> Thread 2: 
      Thread 1:   - rw-access B  
      -deleting B 

이제 텍스트; 스레드 1은 노드 B를 삭제하여 A를 잠그고 B로 잠긴 후 B가 잠긴 후 스레드 2가 B로 /로부터 정보를 읽거나 쓰려고 시도하므로 B를 잠그려고하는 중입니다. 스레드 1이 이미 B.

잠겨 있기 때문에

가 지금은 조금 스레드 1 삭제 B 후 발생 및 B의 잠금을 해제 무엇
을 혼동 해요, 잠깐?
free (b)를 사용하여 Lock in B를 삭제했기 때문에 스레드 1이 교착 상태입니까?
스레드 1에서 B 용 잠금 장치를 파괴해야합니까?
이 사례를 일상적으로 관리해야합니까? like : B가 여전히 노드 인 경우 잠금을 얻은 후 확인 하시겠습니까?
설명하기위한 또 다른 "그림". 당신이 목록 노드를 삭제/삽입하려면

종류가

답변

0

에 관하여)

Thread 1    Thread 2 
---------------------- ---------------------- 
Lock A     
Lock B       
A->next = C;   Lock B 
Unlock A    waiting ... 
free(B)     waiting ... 
Unlock B    waiting ... 
         Get Lock B 
         Try to read/write B // what happens now? 

마이리스트 요소

내가 내 문제를 설명 할 수 있었다 희망이

typedef struct Node 
{ 
    char Name[21];   // Information Dummy 
    pthread_rwlock_t aLock; // rw lock 
    Node *next;    // pointer to the next node 
}Node; 

처럼 보인다 전체 목록을 잠그지 않고 세밀한 동기화를 수행하는 것은 약간 까다 롭습니다. 가장 좋은 방법은 Maurice Herlihy의 슬라이드를 살펴 보는 것입니다. & Nir Shavit : "Linked Lists: Locking, Lock-Free, and Beyond ...".

같은 저자의 "The Art of Multiprocessor Programming"고전 작품을 강력히 추천합니다. 멀티 스레딩에 진지하게 관심이 있으신 분은 꼭 읽어야 할 책입니다.

+0

첫 번째로 코멘트와 책 팁 덕분에, 나는 당신의 추천 된 문헌에 대한 연구를 거의하지 않았고 나의 질문 중 거의 아무 것도 대답하지 못했다. 그러나 나는 알고 싶은 새로운 것들을 배웠다;) – JNgoon

관련 문제