std::thread и блокиране на ресурси

Съобщение за грешка

terminate called after throwing an instance of 'std::system_error'      what():  Resource deadlock avoided

Обяснение

Две причини причиняват тази грешка.

  1. Собственикът на нишката се присъединява.
  2. Две нишки се съединяват една с друга.

Моят код

Използвах услугата boostio_service, за да изпълня рутина за сърдечен ритъм в друга нишка. Той пропусна някои подробности в следния код, но все пак можете да видите задача heartbeat_routine, която ще доведе до нова.

И така, къде е проблемът?

Очевидно функцията heartbeat_routine приема слаб указател като аргументи. Това ни доведе до условието за грешка (1. Собственикът на нишката се присъединява.)когато е извън основната функция, което означаваше, че сервизният обект вече е освободен. Следователно функцията heartbeat_routine ще задържи последния указател. Тъй като функцията приключи и сервизният обект трябваше да бъде унищожен, системата се опита да унищожи нишката и предизвика грешката.

Ако тази публикация е полезна, моля, дайте ми палец. Благодаря!

Ако ви харесва тази публикация, можете да ме почерпите с кафе! :)