diff options
| author | Remko Tronçon <git@el-tramo.be> | 2010-03-28 15:46:49 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2010-03-28 15:46:49 (GMT) | 
| commit | f53a1ef582494458301b97bf6e546be52d7ff7e8 (patch) | |
| tree | 7571b5cbcbd8a8f1dd1c966c9045b6cb69f0e295 /3rdParty/Boost/src/boost/thread/barrier.hpp | |
| parent | 638345680d72ca6acaf123f2c8c1c391f696e371 (diff) | |
| download | swift-f53a1ef582494458301b97bf6e546be52d7ff7e8.zip swift-f53a1ef582494458301b97bf6e546be52d7ff7e8.tar.bz2  | |
Moving submodule contents back.
Diffstat (limited to '3rdParty/Boost/src/boost/thread/barrier.hpp')
| -rw-r--r-- | 3rdParty/Boost/src/boost/thread/barrier.hpp | 63 | 
1 files changed, 63 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/thread/barrier.hpp b/3rdParty/Boost/src/boost/thread/barrier.hpp new file mode 100644 index 0000000..546f5e9 --- /dev/null +++ b/3rdParty/Boost/src/boost/thread/barrier.hpp @@ -0,0 +1,63 @@ +// Copyright (C) 2002-2003 +// David Moore, William E. Kempf +// Copyright (C) 2007-8 Anthony Williams +// +//  Distributed under the Boost Software License, Version 1.0. (See accompanying  +//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_BARRIER_JDM030602_HPP +#define BOOST_BARRIER_JDM030602_HPP + +#include <boost/thread/detail/config.hpp> + +#include <boost/thread/mutex.hpp> +#include <boost/thread/condition_variable.hpp> +#include <string> +#include <stdexcept> + +#include <boost/config/abi_prefix.hpp> + +namespace boost +{ + +    class barrier +    { +    public: +        barrier(unsigned int count) +            : m_threshold(count), m_count(count), m_generation(0) +        { +            if (count == 0) +                throw std::invalid_argument("count cannot be zero."); +        } +     +        bool wait() +        { +            boost::mutex::scoped_lock lock(m_mutex); +            unsigned int gen = m_generation; +         +            if (--m_count == 0) +            { +                m_generation++; +                m_count = m_threshold; +                m_cond.notify_all(); +                return true; +            } + +            while (gen == m_generation) +                m_cond.wait(lock); +            return false; +        } + +    private: +        mutex m_mutex; +        condition_variable m_cond; +        unsigned int m_threshold; +        unsigned int m_count; +        unsigned int m_generation; +    }; + +}   // namespace boost + +#include <boost/config/abi_suffix.hpp> + +#endif  | 
 Swift