当前位置: 首页>>代码示例>>C++>>正文


C++ AtomicUInt32::fetchAndAdd方法代码示例

本文整理汇总了C++中AtomicUInt32::fetchAndAdd方法的典型用法代码示例。如果您正苦于以下问题:C++ AtomicUInt32::fetchAndAdd方法的具体用法?C++ AtomicUInt32::fetchAndAdd怎么用?C++ AtomicUInt32::fetchAndAdd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AtomicUInt32的用法示例。


在下文中一共展示了AtomicUInt32::fetchAndAdd方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: workerThread

void workerThread() {
    bool r = options["r"].trueValue();
    bool w = options["w"].trueValue();
    cout << "read:" << r << " write:" << w << endl;
    long long su = options["sleepMicros"].numberLong();
    Aligned a;
    while( 1 ) { 
        unsigned long long rofs = (rrand() * PG) % len;
        unsigned long long wofs = (rrand() * PG) % len;
        const unsigned P = PG/1024;
        if( mmf ) { 
            if( r ) {
                for( unsigned p = P; p <= recSizeKB; p += P ) {
                    if( rofs < len ) 
                        dummy += mmf[rofs];
                    rofs += PG;
                }
                iops.fetchAndAdd(1);
            }
            if( w ) {
                for( unsigned p = P; p <= recSizeKB; p += P ) {
                    if( wofs < len )
                        mmf[wofs] = 3;
                    wofs += PG;
                }
                iops.fetchAndAdd(1);
            }
        }
        else {
            if( r ) {
                lf->readAt(rofs, a.addr(), recSizeKB * 1024);
                iops.fetchAndAdd(1);
            }
            if( w ) {
                lf->writeAt(wofs, a.addr(), recSizeKB * 1024);
                iops.fetchAndAdd(1);
            }
        }
        long long micros = su / nThreadsRunning;
        if( micros ) {
            sleepmicros(micros);
        }
    }
}
开发者ID:7segments,项目名称:mongo-1,代码行数:44,代码来源:mongoperf.cpp

示例2: init

    void OID::init() {
        static AtomicUInt32 inc(
            static_cast<unsigned>(
                scoped_ptr<SecureRandom>(SecureRandom::create())->nextInt64()));

        {
            unsigned t = (unsigned) time(0);
            unsigned char *T = (unsigned char *) &t;
            _time[0] = T[3]; // big endian order because we use memcmp() to compare OID's
            _time[1] = T[2];
            _time[2] = T[1];
            _time[3] = T[0];
        }

        _machineAndPid = ourMachineAndPid;

        {
            int new_inc = inc.fetchAndAdd(1);
            unsigned char *T = (unsigned char *) &new_inc;
            _inc[0] = T[2];
            _inc[1] = T[1];
            _inc[2] = T[0];
        }
    }
开发者ID:Benguang,项目名称:mongo,代码行数:24,代码来源:oid.cpp

示例3: increment

 void increment(unsigned n) {
     for (unsigned i = 0; i < n; i++) {
         counter.fetchAndAdd(1);
     }
 }
开发者ID:AlexOreshkevich,项目名称:mongo,代码行数:5,代码来源:threadedtests.cpp


注:本文中的AtomicUInt32::fetchAndAdd方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。