デザインパターン(マルチスレッド)まとめ


ちなみに頻繁にインクルードされている "../thread_helper.h" というのは以下の内容になっています。

#ifndef MTDP_THREAD_HELPER_H_INCLUDED
#define MTDP_THREAD_HELPER_H_INCLUDED

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

namespace mtdp
{
    struct thread_helper
    {
        static void sleep(std::size_t ms)
        {
            boost::xtime::xtime_sec_t sec = (boost::xtime::xtime_sec_t)(ms / 1000);
            boost::xtime::xtime_nsec_t nsec = (boost::xtime::xtime_nsec_t)((ms % 1000) * 1000 * 1000);
            boost::xtime xt;
            boost::xtime_get(&xt, boost::TIME_UTC);
            xt.sec += sec;
            xt.nsec += nsec;
            boost::thread::sleep(xt);
        }
        template<class T>
        static void shared_cout(T& value)
        {
            static boost::mutex mutex;

            boost::mutex::scoped_lock lock(mutex);
            std::cout << value;
        }
    };

    template<class T>
    std::string to_string(const T& value)
    {
        return boost::lexical_cast<std::string>(value);
    }
}

#endif // MTDP_THREAD_HELPER_H_INCLUDED