Do you really intend to hold this mutex for the duration of the async_read?  Even if you do, it seems like you want a shared mutex, e.g. http://stackoverflow.com/questions/989795/example-for-boost-shared-mutex-multiple-reads-one-write