Why message buffer is not thread safe?

In my experience, it isn’t that big of a problem, as I tend to normally only have one task at the receiving end of most queue/streams, and I can use a mutex to protect the sending end if needed (you could also have one on the receiving end if you wanted to). The limitation isn’t only one, but one at a time (i.e. if one task is waiting on the stream, another task can’t access that same end).