[boost学习笔记] 关于thread

#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
//#include <boost/bind.hpp>
#include <boost/thread/tss.hpp>
#include <boost/thread/once.hpp>
#include <boost/thread/condition.hpp>
#include <iostream>

//boost::mutex io_mutex;
//
//struct count
//{
//	count(int id):id(id){}
//	void operator()()
//	{
//		for(int i = 0; i < 10; ++i)
//		{
//			boost::mutex::scoped_lock lock(io_mutex);
//			std::cout << id << ": " << i << std::endl;
//		}
//	}
//	int id;
//};


//int main(int argc, char* argv[])
//{
//	boost::thread thrd1(count(1));
//	boost::thread thrd2(count(2));
//		
//	thrd1.join();
//	thrd2.join();
//	return 0;
//}

//boost::mutex io_mutex;
//
//void count(int id)
//{
//	for(int i = 0; i < 10; i++)
//	{
//		boost::mutex::scoped_lock lock(io_mutex);
//		std::cout << id << ": " << i << std::endl;
//	}
//}
//
//int main(int argc, char* argv[])
//{
//	boost::thread thrd1(boost::bind(&count, 1));
//	boost::thread thrd2(boost::bind(&count, 2));
//	thrd1.join();
//	thrd2.join();
//	return 0; 
//}

//const int BUF_SIZE = 10;
//const int ITERS = 100;
//
//boost::mutex io_mutex;
//
//class buffer
//{
//public:
//	typedef boost::mutex::scoped_lock scoped_lock;
//
//	buffer():p(0), c(0), full(0)
//	{
//	}
//
//	void put(int m)
//	{
//		scoped_lock lock(mutex);
//		if(full == BUF_SIZE)
//		{
//			{
//				boost::mutex::scoped_lock lock(io_mutex);
//				std::cout << "Buffer is full, waiting..." << std::endl;
//			}
//			while(full == BUF_SIZE)
//				cond.wait(lock);
//
//		}
//		buf[p] = m;
//		p = (p+1) % BUF_SIZE;
//		++full;
//		cond.notify_one();
//	}
//
//	int get()
//	{
//		scoped_lock lk(mutex);
//		if(full == 0)
//		{
//			{
//				boost::mutex::scoped_lock lock(io_mutex);
//				std::cout << "Buffer is empty, waiting............" << std::endl;
//			}
//			while(full == 0)
//				cond.wait(lk);
//		}
//		int i = buf[c];
//		c = (c+1) % BUF_SIZE;
//		--full;
//		cond.notify_one();
//		return i;
//
//	}
//private:
//	boost::mutex mutex;
//	boost::condition cond;
//	unsigned int p, c, full;
//	int buf[BUF_SIZE];
//};
//
//buffer buf;
//void writer()
//{
//	for(int n = 0; n < ITERS; ++n)
//	{
//		{
//			boost::mutex::scoped_lock lock(io_mutex);
//			std::cout << "sending: " << n << std::endl;
//		}
//		buf.put(n);
//	}
//}
//
//void reader()
//{
//	for(int x = 0; x < ITERS; ++x)
//	{
//		int n = buf.get();
//		{
//			boost::mutex::scoped_lock lock(io_mutex);
//			std::cout << "received: " << n << std::endl;
//		}
//	}
//}
//
//int main(int argc, char* argv[])
//{
//	boost::thread thrd1(&reader);
//	boost::thread thrd2(&writer);
//	thrd1.join();
//	thrd2.join();
//	return 0;
//}

//boost::mutex io_mutex;
//boost::thread_specific_ptr<int> ptr;
//
//struct count
//{
//	count(int id):id(id){}
//	void operator()()
//	{
//		if(ptr.get() == 0)
//			ptr.reset(new int(0));
//
//		for(int i = 0; i < 10; ++i)
//		{
//			(*ptr)++;
//			boost::mutex::scoped_lock loc(io_mutex);
//			std::cout << id << ": " << *ptr << std::endl;
//		}
//	}
//	int id;
//};
//
//int main(int argc, char* argv[])
//{
//	boost::thread thrd1(count(1));
//	boost::thread thrd2(count(2));
//	thrd1.join();
//	thrd2.join();
//	return 0;
//}


int i = 0;
boost::once_flag flag = BOOST_ONCE_INIT;

void init()
{
	++i;
}

void thread()
{
	boost::call_once(&init, flag);
}

int main(int argc, char* argv[])
{
	boost::thread thrd1(&thread);
	boost::thread thrd2(&thread);

	thrd1.join();
	thrd2.join();
	std::cout<< i << std::endl;
	return 0;
}

  

posted @ 2012-10-26 20:02  liangflying  阅读(230)  评论(0编辑  收藏  举报