c++ - boost.thread - 一个简单示例中的访问冲突

标签 c++ multithreading boost visual-studio-2015 boost-thread

我只是想运行一个非常简单的示例,该示例使用带 boost 的线程。这是代码:

#include <iostream>
#include <boost/thread.hpp>

void workerFunc()
{
    std::cout << "hi" << std::endl;
}

int main(int argc, char* argv[])
{
    boost::thread workerThread(workerFunc);
    workerThread.join();
    return 0;
}

但我得到一个异常(exception):

(boost_thread-vc140-mt-1_59.dll) in test.exe: 0xC0000005: Access violation reading location 0x0000000000000019.

尽管有异常,程序仍然运行,我可以在控制台中看到 hi。我使用 VS2015,x64 配置。我的错误在哪里?

最佳答案

显然存在未定义的行为,因为代码没有任何问题。

那么,什么错了?

构建配置、部署(运行时环境)中可能存在错误,或者两者之间不匹配。

具体来说:

  • 您可能会使用编译器版本/标志构建您的项目,使其与所使用的库二进制不兼容。
  • 您可能会链接到 1 个构建/版本的 boost 的导入库,并在运行时找到不同的版本

两个条件介绍Undefined Behaviour .任何事情都有可能发生。

关于c++ - boost.thread - 一个简单示例中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33035250/

相关文章:

ruby - 如何使用 Ruby(和 open-uri)并行处理数组中的项目

java - 我有两个线程,两个几乎相同的东西,但仅在其中一个上出现 CalledFromWrongThreadException 错误。为什么?

c++ - Qt 中的编译器命令行(Boost 相关)

c++ - 如何在C++中定义常量?

c++ - 同时调用 ASIO 对象的 API 是否安全?

java - 超过 2 个线程的工作速度比 1 或 2 个线程慢,除非将 Thread.sleep(1) 放入线程的 run() 方法中

c++ - Boost..... 有什么大惊小怪的?

c++ - 类型转换基类问题

c++ - 使用 TinyXML 解析 XML 元素

c++ - Mac OS X 10.7.4 和 FreeBSD 9.0 上没有右值引用