gpt4 book ai didi

multithreading - boost 互斥量 C++/CLI 问题

转载 作者:行者123 更新时间:2023-12-04 01:04:40 25 4
gpt4 key购买 nike

我正在开发 64 位的 Visual Studio 2008 C#,我想使用一个使用 boost 的库。所以我用 C++/CLI 写了一个包装器。我设法针对我遇到的错误

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

如果我在 C++/CLI 包装器中包含任何文件,该文件本身包含 <boost/thread/mutex.hpp>或者如果我直接将它包含在包装器中,我会得到一个“System.AccessViolationException”“试图读取或写入 protected 内存。这通常表明其他内存已损坏。”

我在为 64 位构建所有东西时非常小心,所以我怀疑问题是否存在。当我在“普通”C++ 中使用 64 位相同的库时,一切正常。我看了几篇帖子,其中人们似乎对 boost 线程有类似的问题,但我发现的解决方案都没有奏效。有没有人有想法?

最佳答案

问题是 boost.thread 使用了一些 #pragma section在没有/clr 的情况下构建时不兼容的指令然后静态链接到使用/clr 的代码。

我听说用/clr 重建 boost.thread(即调用 bjam 时传递 cxxflags="/clr")可以解决这个问题,但我没有亲自尝试过。

我认为动态链接到 boost.thread(而不是静态链接,这是 VC++ 的默认设置;#define BOOST_THREAD_DYN_LINK 在包含任何 boost 头文件之前)也应该可以工作,但同样,我还没有尝试过。

如果这不起作用,请尝试在谷歌上搜索 boost 的某些组合。 thread clr tls ;你应该在 boost 邮件列表上找到很多关于它的帖子,因为这是一个 问题。

编辑 : 如评论 here作者:Raman Sharma(Microsoft 的高级 PM),甚至 std::mutex/clr 不支持,因此 boost.thread 的互斥体实现也不支持也就不足为奇了。

关于multithreading - boost 互斥量 C++/CLI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5670248/

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