2014-10-08 25 views
6

Ben mutrace ile kodumu profilleme ve şu ilginç/endişe verici sonuçlara sahip oldum:Yığın açma işlemi gerçekten kilitleme gerektiriyor mu?

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 yığını gevşemeden uğraşmak zorunda gibi görünüyor.

Uygulamam oldukça katı gecikme gereklilikleriyle çok iş parçacıklıdır ve bu nedenle bunu olabildiğince kolayca ortadan kaldırmak istiyorum. Kodumu yeniden yazmadan bu işlev çağrısından kurtulmak için kullanabileceğim herhangi bir derleyici veya ortam ayarı var mı? Akış kontrolünün bir kısmı için istisnalar kullanıyoruz (muhtemelen), ancak bunu düzeltmek için büyük bir refactoring işi olur.

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

_ "Akış kontrolünün bir parçası için istisnaları kullanıyoruz" _ o zaman bu fiyatı ödemeniz gerekiyor (ve şansınız yok, windows LOL'unuzda taş atan kimse olmadıysa) –

+4

Maalesef ne yazık ki hatayı düzeltmek ve sıcak yoldaki akış denetimi için istisnaları kullanmamak. Başka bir şey bir hack olurdu. –

+3

İstisnalar * normal * program akışının bir parçası olmamalı, * olağan dışı * olması gerekir. Ve istisnalar atarsanız, katı gecikme gereksinimleriniz gerçekten katı olamaz çünkü yığın açma genellikle çok verimli değildir. –

cevap

-3

Düşük gecikme süresi gerekiyorsa istisnaları kullanmayı bırakın.

+0

İstisnalar, atılmadığı takdirde çalışma süresini etkilemez. Düşük gecikme, istisnalarla güvenli bir şekilde sağlanabilir. – Alex

+0

Gecikme gereksinimlerinizi aşarsa "yavaş" istisnaları kullanmayı bırakın. İyi bir uygulamanın "yavaş" istisnalara sahip olması gerekmez. Uygulaman iyi değilse, o zaman, ... –

İlgili konular