gpt4 book ai didi

c++ - cmake 不使用 boost 多线程库

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:48 27 4
gpt4 key购买 nike

我已经设置(Boost_USE_MULTITHREADED ON)但它仍然不使用-mt库。

cmake_minimum_required(VERSION 2.6)
PROJECT(app)
set(Boost_USE_MULTITHREADED ON)
FIND_PACKAGE(Boost COMPONENTS filesystem program_options thread serialization REQUIRED)
ADD_EXECUTABLE(app long_list_of_files)
TARGET_LINK_LIBRARIES(app ${Boost_LIBRARIES})

我可以看到序列化过程只使用一个 CPU 内核 (100%) 而没有使用其他内核。而且 ldd 不显示 -mt

linux-gate.so.1 =>  (0xb781f000)
libboost_filesystem.so.1.42.0 => /usr/lib/libboost_filesystem.so.1.42.0 (0xb77e9000)
libboost_program_options.so.1.42.0 => /usr/lib/libboost_program_options.so.1.42.0 (0xb7795000)
libboost_thread.so.1.42.0 => /usr/lib/libboost_thread.so.1.42.0 (0xb7780000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7766000)
libboost_serialization.so.1.42.0 => /usr/lib/libboost_serialization.so.1.42.0 (0xb76f3000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7608000)
libm.so.6 => /lib/libm.so.6 (0xb75e2000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb75c5000)
libc.so.6 => /lib/libc.so.6 (0xb7468000)
libboost_system.so.1.42.0 => /usr/lib/libboost_system.so.1.42.0 (0xb7463000)
librt.so.1 => /lib/librt.so.1 (0xb745a000)
/lib/ld-linux.so.2 (0xb7820000)

最佳答案

Boost Serialization 旨在提供线程安全,但不是通过线程进行并发序列化。

当通过包管理器安装 Boost 时,您经常会在 /usr/lib 中找到库别名,这些别名将库的更详细名称映射到规范名称。对于 Boost,“标记”名称包括通过 -mt 后缀实现的多线程能力。

ldd 仅显示 CMake 在调用链接器时使用的名称,这是规范的名称,而不是带有 *-mt 后缀的冗长名称。因为您的 Boost 包安装涉及创建以下形式的符号链接(symbolic link)

/usr/lib/libboost_thread-mt.so -> libboost_thread.so.1.42.0

您不必担心链接了错误的库。

事实上,Boost Serialization 本身不会生成线程,因此您不应仅通过使用该库就看到线程数增加。在内部,序列化库使用互斥锁来保护共享指针的计数器。

关于c++ - cmake 不使用 boost 多线程库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com