osiire’s blog

ふしぎなそふとやさん

ブロックの回避

OCamlから呼ばれるCの関数内によく書いてある、caml_enter_blocking_sectionとcaml_leave_blocking_section。なんとなく関数名から処理のブロックと関係があるんだろう、OCamlから呼ばれるCの関数の最初と最後に書いておくお約束なのかなーとも思いつつも、その意味は全く理解していなかった。
ところが、やっと分かった。どうやら「C言語内で処理がブロックされる関数を呼び出すと、例えマルチスレッド化していてもOCamlの処理全体がストップしてしまうので、それを回避するために、処理がブロックされる関数の前後につけるもの」のようだ。実際にブロックされる関数(XWindowEvent)で試してみたので、当たらずとも遠からずだと思う。