2012-04-26 2 views
0

세마포어 또는 뮤텍스를 사용하여 잠글 코드가 필요합니다. 코드는이 같은 것입니다 : 나는 그것을 고정 할 수있는 효율적인 방법을 알고 싶습니다세마포어/뮤텍스 잠금/주파수 해제

callA(); 
callB(); 
callC(); 
. 
. 
. 
callZ(); 

. 내가 생각하고있는 옵션은 칼라 전에

  • 잠금을()하고 callZ 후()의 잠금을 해제. 내 관심은 잠금 장치가 꽤 오랜 기간 동안 설정되어 있다는 것입니다.

  • 각 함수 호출 후 잠금 및 잠금 해제. 나는 자물쇠를 잡고 잡는 '너무 많은 오버 헤드'에 대해 걱정하고 있습니다.

여러분의 도움을 청합니다!

답변

3

모두 사용 사례에 따라 다릅니다. 얼마나 많은 잠금/잠금 해제/잠금/잠금 해제 성능 위약을 용인 할 수 있습니까? 이것에 대해 무게를 썼다. 자물쇠를 기다리는 동안 다른 작업 블록을 얼마나 오래 기꺼이하려고 하는가? 스레드 중 일부는 대기 시간이 중요하거나 대화 형이고 다른 스레드는 대량 또는 낮은 우선 순위입니까? 다른 코드 경로를 통해 동일한 잠금을 사용하는 다른 작업이 있습니까? 그렇다면 어떻게 생겼습니까? callA, callB 등의 중요한 섹션이 정말로 분리 된 경우 26 개의 다른 잠금을 사용 하시겠습니까? 또는 동일한 데이터를 조작하여 단일 잠금을 사용하도록 강요합니까?

그런데 Linux를 사용하는 경우 세마포어가 아닌 (pthreads) 뮤텍스를 사용하십시오. 뮤텍스의 빠른 경로는 완전히 사용자입니다. 논쟁이 없을 때 잠금과 잠금 해제는 매우 저렴합니다. 세마포어에는 빠른 경로가 없습니다.

다른 것을 알지 못하고 세밀한 잠금 기능을 사용하는 것이 좋습니다. 특히 개별 기능이 잠금 장치가 모두 적용될 경우에만 적용되는 가정을하지 않도록 이미 구성된 경우에 특히 유용합니다. 그러나 제가 말했듯이, 그것은 당신이하는 일과 당신이 그것을하는 이유에 달려 있습니다.

+0

감사합니다. 내 의도는 이러한 호출 A, B, C 등에서 사용되는 일부 개체를 삭제하는 스레드 중 하나를 차단하는 것입니다. – Manoj

관련 문제