Tôi đã profiling mã của tôi với mutrace và có thú vị/kết quả đáng lo ngại sau:Stack có thực sự yêu cầu khóa không?
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-.--.
Các _Unwind_Find_FDE
dường như phải đối phó với chồng ươm.
Ứng dụng của tôi rất đa luồng với các yêu cầu độ trễ khá nghiêm ngặt và vì vậy tôi muốn loại bỏ điều này dễ dàng nhất có thể. Có bất kỳ trình biên dịch hoặc môi trường cài đặt tôi có thể sử dụng để thoát khỏi cuộc gọi chức năng này, mà không cần viết lại mã của tôi? Chúng ta sử dụng các ngoại lệ cho một phần của điều khiển luồng (có lẽ là không chính xác) nhưng nó sẽ là một công việc tái cấu trúc lớn để sửa lỗi đó.
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
_ "Chúng tôi sử dụng ngoại lệ cho một phần của điều khiển luồng" _ sau đó bạn phải trả giá đó (và bạn may mắn không ai ném đá vào cửa sổ của bạn LOL) –
Thật không may tôi nghĩ bạn sẽ có để sửa lỗi của bạn và không sử dụng ngoại lệ cho điều khiển luồng trong đường dẫn nóng. Bất cứ điều gì khác sẽ là một hack. –
Ngoại lệ nên * không * là một phần của luồng chương trình thông thường, chúng được cho là * ngoại lệ *. Và nếu bạn ném ngoại lệ, yêu cầu độ trễ nghiêm ngặt của bạn có thể không thực sự nghiêm ngặt bởi vì việc mở thư giãn thường không hiệu quả lắm. –