C++ 11的线程库是有一部分是从boost合并过来的,不过还是有一些区别:
Boost支持线程取消(cancellation), C++ 11不支持
C++ 11支持std::async,Boost不支持
Boost有支持多读单写锁定的boost::shared_mutex,C++11不支持(C++14才出现类似的东西std::shared_timed_mutex [N3891],C++17才正式定义了std::shared_mutex [N4508])
两者关于超时的定义是不同的(但是由于Boost合并了BoostChrono,未来将不会有差异)
有些类的命名是不同的,例如boost::unique_future和std::future
std::thread和boost::thread对传入参数的要求也是不一样的。Boost用的是boost::bind,要求参数是可复制的(copyable)。std::thread允许仅可转移(move-only)类型作为参数,例如std::unique_ptr。此外由于boost::bind的缘故,例如_1的参数占位符(placeholder)在绑定到表达式的时候用法也会不同
如果不显式调用join()或detach()函数,boost::thread的析构函数和赋值 *** 作符会自动调用detach()函数。相比之下,C++11的std::thread则是会调用std::terminate()。
list<ThreadTest>::iterator it 这个是迭代器
for(it =threadList->begin();it!=threadList->end();it++)//要用begin的话需要一个迭代器来获得返回值
//这里我尝试着把他编程for(int a=0;a<10;a++) 但是失败了 据说原因是存储器只有4个元素 但是我下面没有调用 上面的threadList啊 为什么会有元素只有4个一说
for(int i=0;i<4;i++)//这里只给了4个值啊{
t = new ThreadTest();
threadList->push_back(t);
}
首先把Boost库的头文件存放到/usr/include/boost/路径下,再把Lib文件存放到/usr/local/lib/boost/路径下。修改/etc/profile文件,在此文件中增加如下2个环境变量:
BOOST_INCLUDE=/usr/include/boost
export BOOST_INCLUDE
BOOST_LIB=/usr/local/lib/boost
export BOOST_LIB
写一个如下所示的cpp文件。
//samlpecpp
#include <iostream>
#include <string>
#include <boost/threadhpp>
using namespace std;
void threadRoutine(void)
{
boost::xtime time;
timensec = 0;
timesec = 20;
cout << "线程函数做一些事情" << endl;
boost::thread::sleep(time);
}
int main(void)
{
string str;
cout << "输入任意字符开始创建一个线程" << endl;
cin >> str;
boost::thread t(&threadRoutine);
tjoin();
cout << "输入任意字符结束运行" << endl;
cin >> str;
return 0;
}
保存。使用g++编译,命令如下所示:
g++ -o samlpeout samlpecpp -I$BOOST_INCLUDE -L$BOOST_LIB -lboost_thread-gcc-mt
其中-I参数指定Boost头文件路径,-L参数指定Boost库文件路径,-l参数指定使用线程库名。在我使用的这个版本Boost里,到/usr/local/lib/boost路径下,可以看到有关Boost线程库文件,比如:libboost_thread-gcc-mta等。注意在用-l参数指定库名时把磁盘文件名前面那个lib前缀去掉就可以了。
以上就是关于boost的线程库和c++11的线程序有何不同全部的内容,包括:boost的线程库和c++11的线程序有何不同、C++ linux系统使用 code blocks 工具 使用boost数据库 菜鸟编程的问题。、如何使用shell命令生成boost库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)