2014-10-08 2 views
6

나는 mutrace 내 코드를 프로파일 링 다음과 같은 흥미로운/걱정 결과가 봤는데 :스택 풀기 작업에는 실제로 잠금이 필요합니까?

Mutex #1260690 (0x0x7f87bc8eea40) first referenced by: 
    /usr/lib/mutrace/libmutrace.so(pthread_mutex_lock+0x49) [0x7f87be0b76b9] 
    /lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Find_FDE+0x26) [0x7f87bc6eb0e6] 

mutrace: Showing 10 most contended mutexes: 

Mutex # Locked Changed Cont. tot.Time[ms] avg.Time[ms] max.Time[ms] Flags 
1260690 19066789 1509831 109753  3600.883  0.000  0.226 M-.--. 

_Unwind_Find_FDE가 스택 해제를 처리해야 할 것입니다.

내 응용 프로그램은 상당히 엄격한 대기 시간 요구 사항을 가진 고도의 멀티 스레드이므로 가능한 한 쉽게 제거하고 싶습니다. 내 코드를 다시 작성하지 않고이 함수 호출을 제거하는 데 사용할 수있는 컴파일러 나 환경 설정이 있습니까? 우리는 흐름 제어의 일부 (아마 비공식적으로)에 대해 예외를 사용하지만이를 수정하는 것은 큰 리펙토링 작업 일 것입니다.

g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2 
+2

_ "우리는 흐름 제어의 일부에 예외를 사용합니다."_ 그런 다음 그 가격을 지불해야합니다. (운이 좋으면 아무도 당신의 창문에 돌을 던지지 않습니다.) –

+4

불행히도 나는 당신이 실수를 수정하고 핫 경로에서 흐름 제어를위한 예외를 사용하지 마십시오. 다른 것은 해킹이 될 것입니다. –

+3

예외는 정상적인 프로그램 흐름에 속하지 않아야하며, * 예외적 인 것으로 간주되어야합니다. 그리고 예외를 던지면 스택 풀기가 대개 매우 효율적이지 않기 때문에 엄격한 대기 시간 요구 사항을 엄격하게 적용 할 수 없습니다. –

답변

-3

지연 시간이 짧으면 예외 사용을 중지하십시오.

+0

예외가 throw되지 않으면 예외가 런타임에 영향을 미치지 않습니다. 낮은 대기 시간은 예외적으로 안전하게 달성 될 수 있습니다. – Alex

+0

대기 시간 요구 사항을 초과하는 경우 "느린"예외 사용을 중지하십시오. 좋은 구현에는 "느린"예외가있을 필요가 없습니다. 구현이 좋지 않다면, 음, ... –

관련 문제