CLX C++ Libraries
Home >> thread

Declrations

class thread;
class thread_error;

Overview

thread は,スレッドの作成,操作を行うためのクラスです. boost::thread のインターフェースをベースに,pthread および win32 thread を用いて実装を行っています.UNIX 環境(cygwin 版 gcc を含む)で thread モジュールを利用する際は,リンクオプション -lpthread を指定して下さい.

スレッドは,コンストラクタ,または start() メソッドに, 作成されたスレッドが呼び出す関数(または関数オブジェクト)を指定して作成します. 指定できる関数(または,関数オブジェクト)は以下のような形になります.

void function();

class functor {
public:
    void operator()();
};

thread は,実行中に何らかのエラーが発生した場合は,thread_error を例外として送出します.

Sample

example_thread.cpp

#include <iostream>
#include "clx/thread.h"

clx::mutex m_;

class exfunctor {
public:
    exfunctor() : c_('a') {}
    explicit exfunctor(char c) : c_(c) {}
    
    virtual ~exfunctor() {}
    
    void operator()() {
        for (int i = 0; i < 10; i++) {
            clx::mutex::scoped_lock lk(m_);
            for (int j = 0; j < i+5; j++) std::cout << c_ << std::flush;
            std::cout << '\n' << std::flush;
        }
    }

private:
    char c_;
};

int main(int argc, char* argv[]) {
    try {
        clx::thread t1(exfunctor('A'));
        clx::thread t2(exfunctor('B'));
        
        t1.join();
        t2.join();
    }
    catch (clx::system_error &e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    
    std::cout << std::endl;
    std::cout << "end of main thread" << std::endl;
    
    return 0;
}
Result
AAAAA
BBBBB
AAAAAA
BBBBBB
AAAAAAA
BBBBBBB
AAAAAAAA
BBBBBBBB
AAAAAAAAA
BBBBBBBBB
AAAAAAAAAA
BBBBBBBBBB
AAAAAAAAAAA
BBBBBBBBBBB
AAAAAAAAAAAA
BBBBBBBBBBBB
AAAAAAAAAAAAA
BBBBBBBBBBBBB
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB

end of main thread

Related Types

typedef ... handle_pointer;

Construction and Member Functions

thread();

template <class Functor>
explicit thread(Functor f, bool detached = false);

virtual ~thread();

template <class Functor>
void start(Functor f, bool detached = false);

bool joinable() const;
void join();
void detach();
void sleep(double sec);

handle_id_type get_id();

通常,作成したスレッドは join() メソッドで終了を待つ必要があります.これに対して, コンストラクタか start() メソッドの第 2 引数に true を指定した場合,または,detach() メソッドを呼んだ場合は,スレッドが終了すると自動的にリソースの開放などの終了処理が行われます.

Related Pages

  1. CLX C++ Libraries - mutex
  2. CLX C++ Libraries - condition
  3. CLX C++ Libraries - call_once

References

  1. Life like a clown - マルチプラットフォームなスレッドクラス
  2. Boost C++ Libraries - Chapter 17. Thread
  3. pthread document
  4. IT戦記 - pthread でキューを作ってみる(再々挑戦、最終版)
  5. Pthreadプログラミング(2) DETACHED属性の利点と問題点の解決
  6. ものぐさ備忘録 - スレッドの関数一覧(pthread, win32スレッド)
  7. マルチスレッドプログラミング(POSIX、Win32)
  8. AMIGO FOR Win32 - 気軽にスレッド!ThreadWrapper