Boost call_once例子

void call_once(void (*func)(), once_flag& flag);
当有线程执行该函数的时候,其余的线程运行到该函数,会一直等待,直到该函数被彻底执行,执行完成以后flag的值会被修改,通常只是修改一次,接下来的Thrift将会使用到。ios

#include <boost/thread/thread.hpp>
#include <boost/thread/once.hpp>
#include <iostream>ide

int i = 0;
int j = 0;
boost::once_flag flag = BOOST_ONCE_INIT;函数

void Init()
{
        ++i;
}线程

void ThreadFunc()
{
        boost::call_once(&Init, flag);
        ++j;
}it

int main()
{
        boost::thread thrd1(&ThreadFunc);
        boost::thread thrd2(&ThreadFunc);
        thrd1.join();
        thrd2.join();io

        std::cout<<i<<std::endl;
        std::cout<<j<<std::endl;
        return 0;
}class

g++  test.cpp  -lboost_threadthread

结果显示,全局变量i仅被执行了一次++操做,而变量j则在两个线程中均执行了++操做test

相关文章
相关标签/搜索