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
_ "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) –
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. –
İ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. –