![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
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::оператор==<13
boost::thread::оператор!=<13
При BOOST_THREAD_PROVIDES_THREAD_EQ
определяется повышение. Thread предоставляет эти устаревшие функции.
Используйте вместо
boost::::id::оператор==<17
boost::::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_lock
boost::timed_mutex::scoped_try_lock
boost::timed_mutex::timed_scoped_timed_lock
boost::recursive_mutex::scoped_lock
,boost::recursive_mutex::scoped_try_lock
,boost::recursive_timed_mutex::scoped_lock
boost::recursive_timed_mutex::scoped_try_lock
boost::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_FUTURE
BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSION
BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
BOOST_THREAD_PROVIDES_ONCE_CXX11
BOOST_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_THREAD
BOOST_THREAD_DONT_PROVIDE_THREAD_EQ
BOOST_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_CHRONO
BOOST_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 ::
реклама |