전에 물어 보면 용서해주세요. 나는 주위를 둘러 보았지만, 웹 검색을 통해 적절한 단어를 찾을 수 없다는 느낌을받습니다.값 기반 스레드 잠금
저는 파이썬에서 멀티 스레드 응용 프로그램을 사용하고 있습니다. 특정 코드 블록을 잠글 수 있지만 특정 조건의 다른 스레드에만 잠금을 설정하려고합니다. 예를 들어 보겠습니다. thread_a
, thread_b
및 thread_c
세 개의 스레드가 있습니다. 각 스레드는 언제든지 foo
함수를 통해 실행될 수 있습니다. bar
의 두 스레드가 동시에 같아서 Code block ALPHA
에 액세스 할 수 없도록하고 싶습니다. 그러나, 나는 bar
값이 다른 스레드를 차단하고 싶지 않습니다. 이 경우 thread_a
에 bar == "cat"
이 있고 처음으로 (3)
행이 있다고 가정 해 보겠습니다. thread_a
히트 라인 (5)
전에는 thread_b
, bar == "cat"
히트 라인 (3)
으로 가정 해 봅시다. 기다리는 것은 thread_b
입니다. 그러나 thread_c
이 표시되면 bar == "dog"
과 함께 계속 진행할 수 있기를 바랍니다. 또 다른 참고로
(1) def foo(bar):
(2)
(3) lock(bar)
(4) # Code block ALPHA (two threads with equivalent bar should not be in here)
(5) unlock(bar)
는
bar
에 사용할 수있는 값은 완전히 예측할 수 있지만 충돌의 매우 높은 기회입니다.
도움 주셔서 감사합니다. 내가보고 있어요 도서관은 업데이트 날짜 python threading library
'bar'가 유한입니까? 그런 다음 원하는만큼 많은 뮤텍스를 설정 한 다음 스레드에있는 'bar'값에 해당하는 뮤텍스를 잠글 수 있습니다. – numeral
@numeral, 좋은 질문입니다. 막대는 가능한 모든 경우에 대해 뮤텍스를 합리적으로 할당 할 수 있다는 점에서 유한합니다. 이를 반영하기 위해 질문을 업데이트 할 것입니다. –
그런 경우에 내가 생각할 수있는 유일한 것은 당신이 무엇을 'bar'로 추적하고 동적으로 잠글 수 있는지를 추적해야한다는 것입니다. 내가 생각하는 어떤 것이라도 공유 메모리 모델이 있습니다. 즉, 모든 동적 잠금을 잠글 수있는 마스터 잠금이 있어야 함을 의미합니다. 즉, 모든 스레드를 잠그는 뮤텍스를 하나만 가질 수 있습니다. 죄송합니다 도움이되지 못했습니다. :/ – numeral