add double-lock and change the structure of IBookReader