Библиотеки ПОВЫШЕНИЯ в осведомленном о многопоточности режиме

Существует возможность скомпилировать библиотеки BOOST в так называемом ориентированном на многопотоковое исполнение режиме. Раз так Вы будете видеть, что "... мт..." появились на название библиотеки. Я не могу понять то, что это дает мне и когда я должен использовать такой режим? Это приносит мне какую-либо пользу?

Больше, чем это я действительно смущен путем компиляции библиотеки BOOST Threads в неориентированном на многопотоковое исполнение режиме (без-mt на имя). Это не имеет никакого смысла для меня. Смотрит внутренне противоречивый:/

Большое спасибо за любую справку!

28
задан musthero 19 February 2010 в 04:37
поделиться

4 ответа

MT включает поддержку многопоточности в библиотеках boost, что означает, что вы можете спокойно использовать их в своих многопоточных программах (по крайней мере, с точки зрения внутреннего кода библиотеки).

И действительно, сборка библиотеки threads в режиме "no threads" не имеет никакого смысла, но у меня сложилось впечатление, что эта конкретная цель сборки отключена.

Посмотрите вот это

http://sodium.resophonic.com/boost-cmake/current-docs/build_variants.html

http://www.boost.org/doc/libs/1_41_0/more/getting_started/windows.html#library-naming

3
ответ дан 28 November 2019 в 03:26
поделиться

Я не гуру Boost, но предполагаю, что дело в следующем:

В среде MT любые глобальные или общие данные могут иметь более одного потока, пытающегося получить к ним доступ в одно и то же время, что может привести к повреждению данных. Объект, поддерживающий MT, будет использовать синхронизацию (критические секции, мьютексы и т.д.), чтобы гарантировать, что только один поток может получить доступ к данным одновременно.

В библиотеке потоков Boost могут быть функции, которые все еще работают в однопоточных программах. В качестве альтернативы, функции могут быть преобразованы в no-ops (безвредные функции, ничего не делающие), так что одна и та же программа может быть скомпилирована с MT (и функции boost работают) или однопоточной (и функции boost ничего не делают) без необходимости изменения кода.

0
ответ дан 28 November 2019 в 03:26
поделиться

Поскольку вы не указали, как вы собирали, и на какой платформе, я объясню всю историю. Как в Linux, так и в Windows, библиотека Boost.Thread собирается в режиме MT. В Windows, по умолчанию, вы получаете для нее суффикс -mt. В Linux, по умолчанию в версии 1.42, вы не получаете никакого суффикса. Причина, по которой вы не получаете суффикс в Linux, заключается в том, что практически ни одна другая библиотека не использует такое соглашение, и в любом случае в Linux это гораздо менее важно.

Это проясняет ситуацию?

.
20
ответ дан 28 November 2019 в 03:26
поделиться

​​Вы можете создать Boost с поддержкой многопоточности или без нее (threading = multi | single). Boost.Thread форсирует сборку библиотеки, установив threading = multi в ее Jamfile (эквивалент Makefile для bjam).

Таким образом, независимо от того, запрашиваете ли вы поддержку потоковой передачи или нет, Boost.Thread всегда ее предоставляет. Следовательно, вы можете найти оба имени.

3
ответ дан 28 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: