您的位置:首页 > 其它

boost IO流和本地线程存储

2013-12-20 10:03 225 查看
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
using namespace std;

//  一个使用boost::thread_specific_ptr线程本地存储的示例,value将不受其它线程影响.

#include <boost/thread/thread.hpp>
#include <boost/thread/tss.hpp>
#include <cassert>
boost::thread_specific_ptr<int> value;
void increment()
{
int* p = value.get();
++*p;
}
void thread_proc()
{
value.reset(new int(0)); // initialize the thread's storage
for (int i=0; i<10; ++i)
{
increment();
int* p = value.get();
cout<<*p<<endl;
assert(*p == i+1);
}
}
void test001()
{
boost::thread_group threads;
for (int i=0; i<5; ++i)
threads.create_thread(&thread_proc);
threads.join_all();
}

int main()
{
test001();
ifstream if1("/root/test.txt");
if (!if1) {
cerr << "err: unable to open input file: " << __FILE__ << endl;
return -1;
}

ofstream of1("/root/test_of.log");
if (!of1) {
cerr << "err: unable to open ouput file:" << __FILE__ << endl;
return -2;
}

// 通过>>与<<操作将输入文件写入输出文件
string word;
while (if1 >> word)
of1 << word << '\n';

// 通过输入&输出跌代器与copy函数将输入文件写入输出文件
istream_iterator<string> is_iter(if1);
ostream_iterator<string> os_iter(of1, "\n");
//以字符串的形式从输入流拷贝到输出流
copy(is_iter, istream_iterator<string>(), os_iter);
of1.close();
if1.close();
cout<<"ok"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: