|  | 
|      | 
|  | 
| 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]](/img/warning.png) | 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]](/img/warning.png) | 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]](/img/warning.png) | 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]](/img/warning.png) | 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]](/img/warning.png) | 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]](/img/warning.png) | 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]](/img/warning.png) | 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 ::
| реклама |