3.1.7. pfi::concurrent::thread

3.1.7.1. 概要

スレッドを操作するためのクラス。

3.1.7.2. メンバ

thread::thread(function<void()>);

function<void()>にコンパチブルな関数等をコンストラクタに渡す。 この時点ではまだスレッドは起動しない。

thread::~thread()

detachしておらず、さらにまだスレッドが動いている場合、 スレッドをdetachする。

bool thread::start()

startメソッドを呼べばスレッドが起動する。 失敗するとfalseを返す。

bool thread::join()

スレッドが終わるのを待つ。 start()してない、detach()済みの場合、あるいは失敗した時はfalseを返す。

void thread::detach()

スレッドをdetachする。 detachされたスレッドはjoinする必要がなくなる(joinできなくなる)。

3.1.7.2.1. staticメンバ

static tid_t thread::id()

呼び出したスレッドのスレッドIDを返す。

static bool sleep(double sec);

指定した秒数、自分のスレッドの実行を休止する。

static void yield();

他のスレッドに実行を明け渡す。

3.1.7.3. サンプルコード

void foo()
{
  for (int i=0;i<10000;i++) cout<<"moge"<<endl;
}

int main()
{
  thread t(&foo);
  if (!t.start()){ // スレッドを立てる
    // 立たなかった
    ...
  }
  t.join(); // スレッドを待つ
 }

detachスレッドを作りたい場合、次のようにするのが簡単である。

thread(&foo).start();