⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atomic_count.hpp

📁 system C源码 一种替代verilog的语言
💻 HPP
字号:
#ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED#define BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED// MS compatible compilers support #pragma once#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif////  boost/detail/atomic_count.hpp - thread/SMP safe reference counter////  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.//// 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)////  typedef <implementation-defined> boost::detail::atomic_count;////  atomic_count a(n);////    (n is convertible to long)////    Effects: Constructs an atomic_count with an initial value of n////  a;////    Returns: (long) the current value of a////  ++a;////    Effects: Atomically increments the value of a//    Returns: nothing////  --a;////    Effects: Atomically decrements the value of a//    Returns: (long) zero if the new value of a is zero,//      unspecified non-zero value otherwise (usually the new value)////    Important note: when --a returns zero, it must act as a//      read memory barrier (RMB); i.e. the calling thread must//      have a synchronized view of the memory////    On Intel IA-32 (x86) memory is always synchronized, so this//      is not a problem.////    On many architectures the atomic instructions already act as//      a memory barrier.////    This property is necessary for proper reference counting, since//      a thread can update the contents of a shared object, then//      release its reference, and another thread may immediately//      release the last reference causing object destruction.////    The destructor needs to have a synchronized view of the//      object to perform proper cleanup.////    Original example by Alexander Terekhov:////    Given:////    - a mutable shared object OBJ;//    - two threads THREAD1 and THREAD2 each holding //      a private smart_ptr object pointing to that OBJ.////    t1: THREAD1 updates OBJ (thread-safe via some synchronization)//      and a few cycles later (after "unlock") destroys smart_ptr;////    t2: THREAD2 destroys smart_ptr WITHOUT doing any synchronization //      with respect to shared mutable object OBJ; OBJ destructors//      are called driven by smart_ptr interface...//#include <sysc/packages/boost/config.hpp>#ifndef BOOST_HAS_THREADSnamespace boost{namespace detail{typedef long atomic_count;}}#elif defined(BOOST_AC_USE_PTHREADS)#  include <sysc/packages/boost/detail/atomic_count_pthreads.hpp>#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)#  include <sysc/packages/boost/detail/atomic_count_win32.hpp>#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)#  include <sysc/packages/boost/detail/atomic_count_gcc.hpp>#elif defined(BOOST_HAS_PTHREADS)#  define BOOST_AC_USE_PTHREADS#  include <sysc/packages/boost/detail/atomic_count_pthreads.hpp>#else// Use #define BOOST_DISABLE_THREADS to avoid the error#error Unrecognized threading platform#endif#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -