The code looks fine to me. It seems that there's a bug in guile -- when I insert one second sleep between the two invocations of pthread_create, everything works fine. However, when I go down with the sleep time below ~50000 microseconds, things are getting weird.
The good news is that the problem appears only between the first and the second invocation, but if you wait after creation of the first thread, then everything seems OK.
