草庐IT

ZN5boost

全部标签

C++ std::atomic 与 Boost atomic

在我的应用程序中,我有一个int和一个bool变量,它们由多个线程访问(多次写入/读取)。目前,我正在使用两个互斥锁,一个用于int,一个用于bool来保护这些变量。我听说过使用原子变量和运算符来编写无锁多线程程序。我的问题是原子变量和运算符的定义是什么?std::atomic和boost/atomic.hpp?哪个更标准或更流行?这些库是否依赖于平台?我正在使用gnugcc4.6目前是Linux,但理想情况下它应该是跨平台的。我听说“原子”的定义实际上也取决于硬件。谁能解释一下?在多个线程之间共享bool变量的最佳方式是什么?我不想使用“volatile”关键字。这些代码是线程安全的

C++ std::atomic 与 Boost atomic

在我的应用程序中,我有一个int和一个bool变量,它们由多个线程访问(多次写入/读取)。目前,我正在使用两个互斥锁,一个用于int,一个用于bool来保护这些变量。我听说过使用原子变量和运算符来编写无锁多线程程序。我的问题是原子变量和运算符的定义是什么?std::atomic和boost/atomic.hpp?哪个更标准或更流行?这些库是否依赖于平台?我正在使用gnugcc4.6目前是Linux,但理想情况下它应该是跨平台的。我听说“原子”的定义实际上也取决于硬件。谁能解释一下?在多个线程之间共享bool变量的最佳方式是什么?我不想使用“volatile”关键字。这些代码是线程安全的

c++ - 多线程感知模式下的 BOOST 库

可以在所谓的线程感知模式下编译BOOST库。如果是这样,您将看到“...-mt...”出现在库名称中。我不明白它给了我什么,我什么时候需要使用这种模式?它能给我带来什么好处吗?不仅如此,我对在无线程感知机制下编译BOOST线程库(名称中没有-mt)感到非常困惑。这对我来说没有任何意义。看起来自相矛盾:/非常感谢您的帮助! 最佳答案 因为你没有具体说明你是如何构建的,以及在什么平台上,我将解释整个故事。在Linux和Windows上,Boost.Thread库都是以MT模式构建的。在Windows上,默认情况下,您会获得-mt后缀。在

c++ - 多线程感知模式下的 BOOST 库

可以在所谓的线程感知模式下编译BOOST库。如果是这样,您将看到“...-mt...”出现在库名称中。我不明白它给了我什么,我什么时候需要使用这种模式?它能给我带来什么好处吗?不仅如此,我对在无线程感知机制下编译BOOST线程库(名称中没有-mt)感到非常困惑。这对我来说没有任何意义。看起来自相矛盾:/非常感谢您的帮助! 最佳答案 因为你没有具体说明你是如何构建的,以及在什么平台上,我将解释整个故事。在Linux和Windows上,Boost.Thread库都是以MT模式构建的。在Windows上,默认情况下,您会获得-mt后缀。在

c++ - boost::bind 与具有引用参数的函数绑定(bind)

我注意到在将引用参数传递给boost绑定(bind)时,这些参数不会像引用一样起作用。相反,boost创建了成员的另一个拷贝,并且原始传入的变量保持不变。当我更改对指针的引用时,一切正常。我的问题是:是否有可能获得对工作的引用,或者在尝试使用引用参数时至少给出编译错误? 最佳答案 boostdocumentationforbind建议您可以为此使用boost::ref和boost::cref。 关于c++-boost::bind与具有引用参数的函数绑定(bind),我们在StackOve

c++ - boost::bind 与具有引用参数的函数绑定(bind)

我注意到在将引用参数传递给boost绑定(bind)时,这些参数不会像引用一样起作用。相反,boost创建了成员的另一个拷贝,并且原始传入的变量保持不变。当我更改对指针的引用时,一切正常。我的问题是:是否有可能获得对工作的引用,或者在尝试使用引用参数时至少给出编译错误? 最佳答案 boostdocumentationforbind建议您可以为此使用boost::ref和boost::cref。 关于c++-boost::bind与具有引用参数的函数绑定(bind),我们在StackOve

c++ - 为静态链接构建 Boost (MinGW)

我正在使用bjam为MinGW构建Boost(我正在使用系统和文件系统):bjam--toolset=gccstage它构建得很好,但我希望能够静态链接到它(我必须为最终产品提供一个文件)所以我尝试了:bjam--link=static--toolset=gccstage但我得到相同的输出。有什么想法吗?编辑连续第二个问题我在发布后不久就回答了:p我想我会把这个留给其他人。bjam--build-type=complete--toolset=gccstage肯定会构建动态和静态的。 最佳答案 我认为链接是一个属性,而不是bjam的一

c++ - 为静态链接构建 Boost (MinGW)

我正在使用bjam为MinGW构建Boost(我正在使用系统和文件系统):bjam--toolset=gccstage它构建得很好,但我希望能够静态链接到它(我必须为最终产品提供一个文件)所以我尝试了:bjam--link=static--toolset=gccstage但我得到相同的输出。有什么想法吗?编辑连续第二个问题我在发布后不久就回答了:p我想我会把这个留给其他人。bjam--build-type=complete--toolset=gccstage肯定会构建动态和静态的。 最佳答案 我认为链接是一个属性,而不是bjam的一

c++ - boost::tokenizer 与 boost::split

我正在尝试将每个'^'字符上的c++字符串解析为vector标记。我一直使用boost::split方法,但我现在正在编写性能关键代码,想知道哪一个能提供更好的性能。例如:stringmessage="A^B^C^D";vectortokens;boost::split(tokens,message,boost::is_any_of("^"));对比boost::char_separatorsep("^");boost::tokenizer>tokens(text,sep);哪一个会提供更好的性能,为什么? 最佳答案 最佳选择取决于

c++ - boost::tokenizer 与 boost::split

我正在尝试将每个'^'字符上的c++字符串解析为vector标记。我一直使用boost::split方法,但我现在正在编写性能关键代码,想知道哪一个能提供更好的性能。例如:stringmessage="A^B^C^D";vectortokens;boost::split(tokens,message,boost::is_any_of("^"));对比boost::char_separatorsep("^");boost::tokenizer>tokens(text,sep);哪一个会提供更好的性能,为什么? 最佳答案 最佳选择取决于