threads - thread c++ ejemplo
Bibliotecas BOOST en modo multithreading-aware (6)
Existe la posibilidad de compilar bibliotecas BOOST en el llamado modo thread-aware. Si es así, verá "...- mt ..." en el nombre de la biblioteca. No puedo entender lo que me da y cuándo debo usar ese modo. ¿Me da algún beneficio?
Más que eso, estoy realmente confundido al tener compilada la biblioteca de BOOST Threads en un régimen SIN-thread-aware (sin -mt en el nombre). No tiene ningún sentido para mí. Parece contradictorio: /
¡Muchas gracias por cualquier ayuda!
Dado que, en Linux, la versión -mt tiene un alias / enlace a la versión normal, no hace ninguna diferencia. En un sistema moderno y vanidoso, ambos se incluyen simplemente para facilitar la compilación.
Debido a que no especificó cómo construyó y en qué plataforma, le explicaré toda la historia. Tanto en Linux como en Windows, la biblioteca Boost.Thread está construida en modo MT. En Windows, de forma predeterminada, obtiene el sufijo -mt para ello. En Linux, por defecto en 1.42, no obtiene ningún sufijo. La razón por la que no obtienes ningún sufijo en Linux es que prácticamente ninguna otra biblioteca usa esa convención, y de todos modos es mucho menos importante en Linux.
¿Esto aclara las cosas?
MT permite el soporte multiproceso en las bibliotecas de refuerzo, lo que significa que puede usarlos de forma segura en sus programas multiproceso (al menos desde el punto de vista del código interno de la biblioteca).
Y, de hecho, construir la biblioteca de hilos en el modo "sin hilos" no tiene ningún sentido, pero tenía la impresión de que ese objetivo de compilación específico está desactivado.
Mira esto
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
No soy un gurú de Boost, pero supongo que es esto:
En un entorno de MT, cualquier información global o compartida puede tener más de un hilo tratando de acceder a ella al mismo tiempo, lo que puede ocasionar daños en los datos. Un objeto compatible con MT utilizará la sincronización (Secciones críticas, Mutexes, etc.) para garantizar que solo un hilo pueda acceder a los datos a la vez.
Puede haber funciones en la biblioteca de subprocesos de Boost que aún funcionan en programas de subproceso único. Alternativamente, las funciones pueden resolverse en modo no operativo (funciones inofensivas para hacer nada) para que el mismo programa pueda compilarse con MT (y las funciones de refuerzo funcionan) o con una sola rosca (y las funciones de refuerzo no hacen nada) sin tener que cambiar el código.
Puede compilar Boost con soporte multi-threading o no (threading = multi | single). Boost.Thread fuerza la compilación de la biblioteca configurando threading = multi en su Jamfile (el equivalente bjam de un Makefile).
Por lo tanto, independientemente de si solicita soporte de threading o no, Boost.Thread siempre lo proporciona. Por lo tanto, puedes encontrar ambos nombres.
Hay una opción para volver a poner el sufijo "-tt" ( bjam --layout=tagged
)
--layout=<layout> Determines whether to choose library names
and header locations such that multiple
versions of Boost or multiple compilers can
be used on the same system.
versioned - Names of boost binaries
include the Boost version number, name and
version of the compiler and encoded build
properties. Boost headers are installed in a
subdirectory of <HDRDIR> whose name contains
the Boost version number.
tagged -- Names of boost binaries include the
encoded build properties such as variant and
threading, but do not including compiler name
and version, or Boost version. This option is
useful if you build several variants of Boost,
using the same compiler.
system - Binaries names do not include the
Boost version number or the name and version
number of the compiler. Boost headers are
installed directly into <HDRDIR>. This option
is intended for system integrators who are
building distribution packages.
The default value is ''versioned'' on Windows, and
''system'' on Unix.