std::thread и блокиране на ресурси
Съобщение за грешка
terminate called after throwing an instance of 'std::system_error' what(): Resource deadlock avoided
Обяснение
Две причини причиняват тази грешка.
- Собственикът на нишката се присъединява.
- Две нишки се съединяват една с друга.
Моят код
Използвах услугата boostio_service, за да изпълня рутина за сърдечен ритъм в друга нишка. Той пропусна някои подробности в следния код, но все пак можете да видите задача heartbeat_routine, която ще доведе до нова.
И така, къде е проблемът?
Очевидно функцията heartbeat_routine приема слаб указател като аргументи. Това ни доведе до условието за грешка (1. Собственикът на нишката се присъединява.)когато е извън основната функция, което означаваше, че сервизният обект вече е освободен. Следователно функцията heartbeat_routine ще задържи последния указател. Тъй като функцията приключи и сервизният обект трябваше да бъде унищожен, системата се опита да унищожи нишката и предизвика грешката.
Ако тази публикация е полезна, моля, дайте ми палец. Благодаря!
Ако ви харесва тази публикация, можете да ме почерпите с кафе! :)