のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Boost Thread(1) マルチスレッドに挑戦してみよう

Sponsored Links

皆さんこんにちは
お元気ですか?やりたいこと、やることが増えすぎて困ってるけど、まぁなんとかなるでしょう。

実は以前、C++11でのThreadを紹介させて頂きました。
今回はBoostを使ったMultiThreadを紹介したいと思います。

因みにこのライブラリOSが変わっても特に変わりなく使えます。

なぜかしらないけどコンパイルに苦戦した。

Mac OS 10.9.1 homebrewでboostをインストールするとこちらです。

g++ thread.cpp -I /usr/local/include/ /usr/local/lib/libboost_thread-mt.a -lboost_system

なぜか、検索して発見されるコンパイルコマンドだと実行できません。リンク不足と言われるので、一つ一つエラーを解決していきました。すると、上記の形式に落ち着きました。

実際に動かしてみよう

ソースコード

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

//using namespace std;
using namespace boost;

#define N 10

void printMorning(){
	for(int i = 0; i < N; i++){
		std::cout << "good morning" << std::endl;
	}
}

void printEvening(){
	for(int i = 0; i < N; i++){
		std::cout << "good evening" << std::endl;
	}
}

int main(int argc, char const *argv[]){
	thread thread1(&printMorning);
	thread thread2(&printEvening);

	thread1.join();
	thread2.join();
	return 0;
}

出力

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

ggoooodd  emvoernniinngg

解説

threadクラスを使って中に関数のアドレスを渡すことによって実行しています。
その後joinを使って待機させています。

出力が混合しているのはロックも何もかけていないからですね。