現在地 >> メニュー >> TBB >> TBB::アトミック操作

問題


外部変数を「atomic<T>クラス」で宣言し、並列処理でインクリメントした時に、
正しく操作が行われている事を確認せよ

答え

#include <cstdio>
#include <tbb/task_scheduler_init.h>
#include <tbb/blocked_range.h>
#include <tbb/parallel_for.h>
#include <tbb/atomic.h>


tbb::atomic<int> atmX; //宣言と同時に初期化はできない!!


//-------------- 各種データ構造 --------------------//
class AtomicInc
{
public:
	//コンストラクタ
	AtomicInc(){}

	//オペレータ
	void operator()(const tbb::blocked_range<int> &range)const
	{
		for(int n = range.begin();n != range.end();++n)
		{
			printf("%d \n",atmX.fetch_and_increment());
		}
	}

};


//-------------Tbbの処理------------------------//
void TbbProcess()
{
	atmX = 0; //初期化
	tbb::task_scheduler_init TbbInit;

	tbb::parallel_for(tbb::blocked_range<int>(0,100),AtomicInc(),tbb::auto_partitioner());
	
	TbbInit.terminate();

}


//-------------- メイン関数 ------------------------//
int main(int argc, char *argv[])
{
	
	TbbProcess();

	return EXIT_SUCCESS;
}

メモ


単なるグローバル変数だと正しくインクリメントできない可能性がある。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます