![]() |
![]() ![]() ![]() ![]() |
![]() |
Using and building the libraryBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 35. Thread 4.7.1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Особенность |
Противоядие |
V2 |
V3 |
V4 |
|---|---|---|---|---|
USES_CHRONO |
DONT_USE_CHRONO |
YES/NO |
YES/NO |
YES/NO |
ПРОВИДЕНИЯ_ИНТЕРРУПЦИИ |
DONT_PROVIDE_INTERRUPTIONS |
ДА |
ДА |
ДА |
THROW_IF_PRECONDITION_NOT_SATISFIED |
- |
NO |
NO |
NO |
PROVIDES_PROMISE_LAZY |
DONT_PROVIDE_PROMISE_LAZY |
ДА |
NO |
NO |
PROVIDES_BASIC_THREAD_ID |
DONT_PROVIDE_BASIC_THREAD_ID |
NO |
ДА |
ДА |
PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN |
DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN |
NO |
ДА |
ДА |
ПРОВИДЫ_ШАРЕД_МУТЕКС_УПРАВКИ_КОНВЕРСИЯ |
DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSION |
NO |
ДА |
ДА |
ПРОВИДЫ_ЭКСПУТОРЫ |
- |
NO |
NO |
NO |
ПРОВИДЕНИЯ_EXPLICIT_LOCK_CONVERSION |
DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION |
NO |
ДА |
ДА |
ПРОВИДЫ_БУДУЩЕЕ |
DONT_PROVIDE_FUTURE |
NO |
ДА |
ДА |
ПРОВИДЫ_ФУТУРЕ_КТОР_АЛЛОКАТОРЫ |
DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS |
NO |
ДА |
ДА |
PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE |
DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE |
NO |
ДА |
ДА |
PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE |
DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE |
NO |
ДА |
ДА |
PROVIDES_ONCE_CXX11 |
DONT_PROVIDE_ONCE_CXX11 |
NO |
ДА |
ДА |
USES_MOVE |
DONT_USE_MOVE |
NO |
ДА |
ДА |
USES_DATEME |
DONT_USE_DATEME |
YES/NO |
YES/NO |
YES/NO |
PROVIDES_THREAD_EQ |
DONT_PROVIDE_THREAD_EQ |
ДА |
ДА |
NO |
ПРОВИДЕНИЯ_УСЛОВИЯ |
DONT_PROVIDE_CONDITION |
ДА |
ДА |
NO |
ПРОВИДЫ_НЕСТЕДЫ_ЛОКСЫ |
DONT_PROVIDE_NESTED_LOCKS |
ДА |
ДА |
NO |
PROVIDES_SIGNATURE_PACKAGED_TASK |
DONT_PROVIDE_SIGNATURE_PACKAGED_TASK |
NO |
NO |
ДА |
PROVIDES_FUTURE_INVALID_AFTER_GET |
DONT_PROVIDE_FUTURE_INVALID_AFTER_AFTER_GET |
NO |
NO |
ДА |
PROVIDES_VARIADIC_THREAD |
DONT_PROVIDE_VARIADIC_THREAD |
NO |
NO |
C++11 |
Повышаю. Thread использует по умолчанию Boost. Хроно для связанных с временем функций и определения BOOST_THREAD_USES_CHRONO, если BOOST_THREAD_DONT_USE_CHRONO не определен. Пользователь должен определить BOOST_THREAD_DONT_USE_CHRONO для компиляторов, которые плохо работают с Boost. Хроно.
![]() |
Warning |
|---|---|
При определении BOOST_THREAD_PLATFORM_WIN32 BOOST_THREAD_USES_CHRONO определяется независимо от настроек пользователя. |
Повышаю. Thread использует по умолчанию семантический внутренний ход реализации. Начиная с версии 3.0.0 вы можете использовать эмуляцию движения, предоставляемую Boost. Пошли.
Когда BOOST_THREAD_VERSION==2<7 BOOST_THREAD_USES_MOVE , если вы хотите использовать Boost. Переместите интерфейс. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_USE_MOVE , если вы не хотите использовать Boost. Переместите интерфейс.
Начало. Функции, связанные со временем, введенные в Boost 1.35.0, с использованием библиотеки Boost.Date_Time, обесцениваются. К ним относятся (но не ограничиваются):
Когда BOOST_THREAD_VERSION<=3 && определено BOOST_THREAD_PLATFORM_PTHREAD определять BOOST_THREAD_DONT_USE_DATETIME, если вы не хотите использовать Boost. Интерфейсы, связанные с DateTime. Когда BOOST_THREAD_VERSION>3 && определено BOOST_THREAD_PLATFORM_PTHREAD определять BOOST_THREAD_USES_DATETIME, если вы хотите использовать Boost. Интерфейсы, связанные с DateTime.
![]() |
Warning |
|---|---|
При определении BOOST_THREAD_PLATFORM_WIN32 BOOST_THREAD_USES_DATETIME определяется независимо от настроек пользователя. |
Повышаю. Thread использует по умолчанию Boost. Атомный в POSIX платформах для реализации call_once.
Определите BOOST_THREAD_USES_ATOMIC , если вы хотите использовать Boost. Atomic.Define BOOST_THREAD_DONT_USE_ATOMIC , если вы не хотите использовать Boost. Атомный или не поддерживается на платформе.
Обесцениваются следующие операторы:
boost::thread::оператор==<13boost::thread::оператор!=<13При BOOST_THREAD_PROVIDES_THREAD_EQ определяется повышение. Thread предоставляет эти устаревшие функции.
Используйте вместо
boost::::id::оператор==<17boost::::id::оператор!=<17![]() |
Warning |
|---|---|
Это серьезное изменение в отношении версии 1.x. |
Когда BOOST_THREAD_VERSION>=4 определяют BOOST_THREAD_PROVIDES_THREAD_EQ<2 Если вы хотите эту функцию. Когда BOOST_THREAD_VERSION<4 определяют BOOST_THREAD_DONT_PROVIDE_THREAD_EQ<2 Если вам не нужна эта функция.
boost::условие обесценивается. При BOOST_THREAD_PROVIDES_CONDITION определяется повышение. Thread предоставляет эту устаревшую функцию.
Используйте вместо boost::condition_variable_any.
![]() |
Warning |
|---|---|
Это серьезное изменение в отношении версии 1.x. |
Когда BOOST_THREAD_VERSION>3<7 BOOST_THREAD_PROVIDES_CONDITION, если вы хотите эту функцию. Когда BOOST_THREAD_VERSION<=3 определите BOOST_THREAD_DONT_PROVIDE_CONDITION, если вам не нужна эта функция.
Обесцениваются следующие вложенные типдефы:
boost::mutex::scoped_lock,boost::mutex::scoped_try_lock,boost::timed_mutex::scoped_lockboost::timed_mutex::scoped_try_lockboost::timed_mutex::timed_scoped_timed_lockboost::recursive_mutex::scoped_lock,boost::recursive_mutex::scoped_try_lock,boost::recursive_timed_mutex::scoped_lockboost::recursive_timed_mutex::scoped_try_lockboost::recursive_timed_mutex::timed_scoped_timed_lockПри BOOST_THREAD_PROVIDES_NESTED_LOCKS определяется повышение. Thread предоставляет эти устаревшие функции.
Используйте вместо этого * boost::boost::mutex>, boost::mutex>try_to_lock_t конструктор, boost::boost::boost::try_to_lock_tboost::unique_lock::boost: recursive_mutex:recursive_mutextry_to_lock_t конструктор boost::recursive_timed_mutexboost::unique_lock::boostrecursive_timed_mutex::recursive_timed_mutexrecursive_timed_mutex с try_to_lock_t конструктор boost::boost::recursive_timed_mutex
![]() |
Warning |
|---|---|
Это серьезное изменение в отношении версии 1.x. |
Когда BOOST_THREAD_VERSION>=4<7 BOOST_THREAD_PROVIDES_NESTED_LOCKS, если вам нужны эти функции. Когда BOOST_THREAD_VERSION<4 определите BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS, если вам не нужны эти функции.
Повышаю. Thread по умолчанию использует поток::id на Posix на основе типа pthread (BOOST_THREAD_PROVIDES_BASIC_THREAD_ID). Для обратной совместимости, а также для компиляторов, которые плохо работают с этой модификацией, пользователь может определить BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID.
Определите BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID , если вам не нужны эти функции.
Общая реализация mutex на платформе Windows в настоящее время обеспечивает меньшую функциональность, чем общая, которая используется для платформ на основе PTheads. Чтобы иметь доступ к этим функциям, пользователю необходимо определить BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN, чтобы использовать общую реализацию, которая, хотя и может быть менее эффективной, предоставляет все функции.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN , если вам нужны эти функции. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN , если вам не нужны эти функции.
Повышаю. Потоки включают в версию 3 конверсию Shared Locking Upwards, как определено в Shared Locking. Эти преобразования должны использоваться осторожно, чтобы избежать тупика или лайв-лока. Пользователь должен четко определить BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSION, чтобы получить эти конверсии вверх.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSION , если вам нужны эти функции. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSION , если вам не нужны эти функции.
В Shared Locking конверсии блокировки являются явными. Поскольку это явное преобразование нарушает интерфейсы блокировки, оно предоставляется только в том случае, если определено BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION , если вам нужны эти функции. Когда BOOST_THREAD_VERSION==3 определите BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION , если вам не нужны эти функции.
C++11 использует std::будущее. Версии Boost. Предыдущая версия 3.0.0 использует boost:unique_future. Так как версия 3.0.0 boost::future заменяет boost::unique_future при определении BOOST_THREAD_PROVIDES_FUTURE. Документация больше не содержит boost::unique_future.
Когда BOOST_THREAD_VERSION==2<7 BOOST_THREAD_PROVIDES_FUTURE, если вы хотите использовать boost::future. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_FUTURE, если вы хотите использовать boost::unique_future.
C++11 обещает инициализировать связанное состояние в момент строительства. Версии Boost. Поток, предшествующий версии 3.0.0, инициализирует его лениво в любой момент времени, когда это состояние необходимо.
С версии 3.0.0 эта разница в поведении может быть настроена. При определении BOOST_THREAD_PROVIDES_PROMISE_LAZY обеспечивается обратно совместимое поведение.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY , если вы хотите использовать boost::future. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_PROVIDES_PROMIDES_LAZY , если вы хотите использовать boost::unique_future.
C++11 std::promise предоставляет конструкторам распределители.
template <typename R> class promise { public: template <class Allocator> explicit promise(allocator_arg_t, Allocator a); // ... }; template <class R, class Alloc> struct uses_allocator<promise<R>,Alloc>: true_type {};
где
struct allocator_arg_t { }; constexpr allocator_arg_t allocator_arg = allocator_arg_t(); template <class T, class Alloc> struct uses_allocator;
С версии 3.0.0 Boost. Thread реализует этот конструктор, используя следующий интерфейс:
namespace boost { typedef container::allocator_arg_t allocator_arg_t; constexpr allocator_arg_t allocator_arg = {}; namespace container { template <class R, class Alloc> struct uses_allocator<promise<R>,Alloc>: true_type {}; } template <class T, class Alloc> struct uses_allocator : public container::uses_allocator<T, Alloc> {}; }
это создает зависимость от роста. Контейнер. Эта функция предоставляется только в том случае, если определено BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS , если вам нужны эти функции. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS , если вам не нужны эти функции.
C++11 имеет различную семантику для разрушителя потока и назначения движения. Вместо того, чтобы отсоединять нить, вызывает окончание(), если нить была соединена. При BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE и BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE определяется Boost. Thread обеспечивает семантику C++.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE , если вам нужны эти функции. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE , если вам не нужны эти функции.
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE , если вам нужны эти функции. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE , если вам не нужны эти функции.
C++11 определяет конструктор по умолчанию для once_flag. При BOOST_THREAD_PROVIDES_ONCE_CXX11 определяется повышение. Thread обеспечивает семантику C++. При этом предыдущий совокупный синтаксис не поддерживается.
boost::once_flag once = BOOST_ONCE_INIT;
Теперь ты должен просто сделать
boost::once_flag once;
Когда BOOST_THREAD_VERSION==2 определите BOOST_THREAD_PROVIDES_ONCE_CXX11, если вам нужны эти функции. Когда BOOST_THREAD_VERSION>=3 определите BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11, если вам не нужны эти функции.
Упакованный класс задач C++11 имеет параметр шаблона подписи. При BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK определяется повышение. Thread предоставляет эту функцию C++.
![]() |
Warning |
|---|---|
Это серьезное изменение в отношении версии 3.x. |
Когда BOOST_THREAD_VERSION<4 определите BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK, если вы хотите эту функцию. Когда BOOST_THREAD_VERSION>=4 определите BOOST_THREAD_DONT_PROVIDE_SIGNATURE_PACKAGED_TASK, если вам не нужна эта функция.
Конструктор потоков C++11 принимает переменное число аргументов rvalue. При BOOST_THREAD_PROVIDES_VARIADIC_THREAD определяется повышение. Thread предоставляет эту функцию C++, если не определено следующее:
Когда BOOST_THREAD_VERSION>4 определяют BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD<2 Если вам не нужна эта функция.
C++11 future<>::get() объявляет недействительным будущее после получения его значения. При BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET определяется повышение. Thread предоставляет эту функцию C++.
![]() |
Warning |
|---|---|
Это серьезное изменение в отношении версии 3.x. |
Когда BOOST_THREAD_VERSION<4 определите BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET, если вы хотите эту функцию. Когда BOOST_THREAD_VERSION>=4 определите BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET, если вам не нужна эта функция.
Прерывание потока, хотя и полезно, делает любую точку прерывания менее эффективной, чем если бы нить не была прерываемой.
При BOOST_THREAD_PROVIDES_INTERRUPTIONS определяется повышение. Нить обеспечивает прерывания. При BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS определяется повышение. Нить не обеспечивает прерывания.
Повышаю. BOOST_THREAD_PROVIDES_INTERRUPTIONS Если ни BOOST_THREAD_PROVIDES_INTERRUPTIONS, ни BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS не определены, то разрыв совместимости отсутствует.
BOOST_THREAD_VERSION определяет Рост. Версия Thread. Версия по умолчанию 2. В этом случае следующие макросы разрушения или расширения определяются, если не требуется обратное:
BOOST_THREAD_PROVIDES_PROMISE_LAZYПользователь может запросить версию 3, определив BOOST_THREAD_VERSION-3. В этом случае следующие макросы разрушения или расширения определяются, если не требуется обратное:
BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION BOOST_THREAD_PROVIDES_FUTUREBOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WINBOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONBOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORSBOOST_THREAD_PROVIDES_ONCE_CXX11BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZYПользователь может запросить версию 4, определив BOOST_THREAD_VERSION до 4. В этом случае определяются следующие разбивающие или расширяющие макросы, если не запрашивается обратное:
BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET BOOST_THREAD_PROVIDES_VARIADIC_THREADBOOST_THREAD_DONT_PROVIDE_THREAD_EQBOOST_THREAD_DONT_USE_DATEMEНекоторые компиляторы работают неправильно с некоторыми добавленными функциями.
Если __SUNPRO_CC <0x5100, библиотека определяет
BOOST_THREAD_DONT_USE_MOVEЕсли __SUNPRO_CC <0x5100, библиотека определяет
BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORSЕсли __IBMCPP__ < 1100, то библиотека определяет
BOOST_THREAD_DONT_USE_CHRONOBOOST_THREAD_USES_DATEИ увеличить. Нить не связана с Boost. Хроно.
Если _WIN32_WCE && _WIN32_WCE==0x501 библиотека определяет
BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORSСтатья Using and building the library раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 35. Thread 4.7.1 может быть полезна для разработчиков на c++ и boost.
:: Главная :: Chapter 35. Thread 4.7.1 ::
реклама |