boost的线程库和c++11的线程序有何不同

boost的线程库和c++11的线程序有何不同,第1张

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库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9294104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存