Я не совсем уверен, что именно делает флаг threading=multi
при создании boost. В документации указано:
Causes the produced binaries to be thread-safe. This requires proper
support in the source code itself.
который, кажется, не очень специфичен. Означает ли это, что доступ к, например, форсированным контейнерам, обеспечивается mutexes/locks
или аналогичным? Поскольку производительность моего кода имеет решающее значение, я хотел бы свести к минимуму любые ненужные мьютексы и т.д.
Дополнительная информация:
Мой код - это подключаемая DLL-библиотека, которая загружается в многопоточное стороннее приложение. Я статически связываю boost в DLL (плагину не разрешено иметь какие-либо другие зависимости, кроме стандартных DLL файлов Windows, поэтому я вынужден это сделать).
Хотя приложение многопоточное, большинство функций в моей DLL вызываются только из одного потока, и поэтому обращения к контейнерам не нужно защищать. Я явно защищаю оставшиеся места моего кода, который можно вызывать из нескольких потоков, используя boost::mutex
и друзей.
Я попытался повысить уровень сборки с помощью threading=multi
и threading=single
, и оба они работают, но мне очень хотелось бы знать, что я здесь делаю.