To be honest, you could have 100s of asteroids and 100s of blasts and still not need threads. All they do is complicate things, and most the time they are unnecessary.
That said, your handle_blast function has a mismatched lock / unlock. They are in different braces. So lock is only called when not respawning, but unlock is always called. This is probably UB.
Second, your generate new asteroids function is not protected by a mutex. This can lead to a race condition in your asteroid list.
Another thing, you can only draw to the display that is current for the calling thread. This means your respawn wait function is drawing to a display that is not current.
Honestly, you're making this much harder than it needs to be. The A5teroids demo included with allegro is probably not threaded. You could look to it for inspiration if you like. It's called cosmic protector.
Other than that, the threading seems clean, but there is a potential for deadlocks when modifying asteroids since more than one thread changes the asteroid list.
General things to think about when threading : Make your critical sections as small and as fast as possible. Avoid race conditions by specifying which data each thread will modify.
Again, a debugger would probably solve this quickly.