2012-07-23 4 views
1

는 다음 작업을 수행 할 수 있어야합니다 검색 - 및 - 추가 :스레드 안전

  1. 링크 된 목록을 검색 할 수 있습니다.
  2. 찾을 수없는 경우 새로운 노드를 목록에 추가하십시오.
  3. 스레드가 안전하고 대부분 읽기 때문에 rwlock을 사용하십시오.

내가 겪고있는 문제는 read_lock에서 write_lock으로 승격 할 때입니다. 목록 검색을 수행하는 동안 다른 스레드가 write_lock을 기다리지 않았 음을 확인하기 위해 목록을 다시 검색해야합니다. read_lock.

이중 목록 검색 (아마도 일종의 seq_lock)을 수행하지 않고 위와 같은 다른 방법이 있습니까?

답변

0

링크 된 목록을 정렬 된 연결된 목록으로 변환하십시오. 새 노드를 추가 할 시간이되면 전체 목록을 검색하는 대신 두 개의 노드 만 검사하여 잠금을 획득하는 동안 다른 작성자가 동등한 노드를 추가했는지 다시 확인할 수 있습니다. 새 노드의 정렬 된 순서를 결정해야하기 때문에 각 노드 삽입에 약간의 시간을 할애하지만 전체 목록을 검색 할 필요가 없으므로 시간을 절약 할 수 있습니다. 전반적으로 많은 시간을 절약 할 수 있습니다.