Python
sleep start
hello # main-thread's hello can be executed during time.sleep(3)
sleep end
sleep start
sleep end
hello # pybind11_playground.toyclass().sleep(3) blocks executing main-thread's hello
Ruby
sleep start
hello # main-thread's hello can be executed during sleep(3)
hello
hello
hello
hello
sleep end
sleep start
hello # took 3 secs to show the first hello; RicePlayground::ToyClass.new.sleep(3) blocks execution
sleep end
hello
hello
hello
hello
結論
表題のとおりです。これが意味するところは、 Python/Ruby側にexportされていないC-Ext内だけで完結しているコードに関しては、競合状態は考慮する必要がないということです。
(たとえばvectorを0からsize()-1まで走査する場合にsizeが変わる可能性があるとか、そういう話)
C-Extはまだまだ難しいなぁ^^;;;