guest の atomic memory read とかのたびに valgrind 管理のメモリ領域も触らないといけないので、まるで atomic でなくなる。これは厳しいので実行は mutex で直列化されている。実際に複数スレッドが作られるのだけど、一つ以外は寝ている感じ
これによって valgrind scheduler は切り替えタイミングを完全にコントロールできるので、 IR の1命令を実行している最中で切り替わったりしない。 syscall とかに入る前にロックは外す。 Python の GIL / Ruby の GVL と完全に同じですね
実際に multithread 化するは open question とのこと。今ちょっと試した感じ single thread 実行に見えました