Глядя на документацию, похоже, что объект сокета TCP не является потокобезопасным. Значит, я не могу запускать async_read из одного потока и async_write одновременно из другого потока? Также я предполагаю, что это относится и к boost :: asio :: write ()?
Могу ли я выполнить write () - синхронно, а async_read - из другого потока? Если это небезопасно, то, вероятно, единственный способ - получить собственный дескриптор сокета. и использовать синхронные механизмы Linux для одновременного чтения и записи. У меня есть приложение, в котором чтение и запись фактически независимы.





Это потокобезопасный для перечисленных вами вариантов использования. Вы можете читать в одном потоке, а писать в другом. И для этого вы можете использовать как синхронные, так и асинхронные операции.
Однако вы столкнетесь с проблемами, если попытаетесь выполнить один выделенный тип операции (например, чтение) из более чем одного потока. Особенно, если вы используете автономные / составные операции (boost::asio::read(socket) вместо socket.read_some(). Причина этого в том, что примитивные операции являются атомарными / поточно-безопасными. А составные операции работают путем многократного вызова примитивов.