gmt*_*gmt 12 64-bit multithreading boost mutex c++-cli
我正在使用64位的Visual Studio 2008 C#进行开发,我想使用一个使用boost的库.所以我用C++/CLI编写了一个包装器.我设法针对我遇到的错误
#include <boost/thread/mutex.hpp>.
Run Code Online (Sandbox Code Playgroud)
如果我在我的C++/CLI包装器中包含任何文件本身包含<boost/thread/mutex.hpp>或者如果我将它直接包含在包装器中,我会得到一个"System.AccessViolationException""试图读取或写入受保护的内存.这通常表明其他内存是腐败."
我非常小心地为64bit构建一切,所以我怀疑问题是存在的.当我在"普通"C++中使用64位的相同库时,一切正常.我发现了几个帖子,人们似乎在使用boost线程时遇到了类似的问题,但我找不到任何解决方案.有没有人有想法?
问题是boost.thread使用一些#pragma section在没有/ clr的情况下构建时不兼容的指令,然后静态链接到使用/ clr的代码.
我听说用/ clr重建boost.thread(即cxxflags="/clr"调用bjam时传递)修复了这个问题,但我没有亲自尝试过.
我假设动态链接到boost.thread(而不是静态,这是VC++的默认值; #define BOOST_THREAD_DYN_LINK在包括任何boost头之前)也应该工作,但是我再次尝试过.
如果这不起作用,尝试谷歌搜索的一些组合boost thread clr tls; 你应该在boost邮件列表上找到很多关于它的帖子,因为这是一个老问题.
编辑:正如评论这里通过拉曼夏尔马(微软高级PM),即使std::mutex不使用/ clr支持的,所以它是没有真正的惊喜,boost.thread的互斥的实施是没有.