1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns:MSHelp="http://www.microsoft.com/MSHelp/" lang="en-us" xml:lang="en-us"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="DC.Type" content="reference">
<meta name="DC.Title" content="C++11 Synchronization">
<meta name="DC.subject" content="C++11 Synchronization">
<meta name="keywords" content="C++11 Synchronization">
<meta name="DC.Relation" scheme="URI" content="../../reference/synchronization.htm">
<meta name="DC.Relation" scheme="URI" content="../general_conventions/namespaces.htm">
<meta name="DC.Format" content="XHTML">
<meta name="DC.Identifier" content="c_11_synchronization">
<meta name="DC.Language" content="en-US">
<link rel="stylesheet" type="text/css" href="../../intel_css_styles.css">
<title>C++11 Synchronization</title>
</head>
<body id="c_11_synchronization">
<!-- ==============(Start:NavScript)================= -->
<script src="..\..\NavScript.js" language="JavaScript1.2" type="text/javascript"></script>
<script language="JavaScript1.2" type="text/javascript">WriteNavLink(2);</script>
<!-- ==============(End:NavScript)================= -->
<a name="c_11_synchronization"><!-- --></a>
<h1 class="topictitle1">C++11 Synchronization</h1>
<div><div class="section"><p>The Intel® Threading Building Blocks (Intel® TBB) library
approximates a portion of C++11 interfaces for condition variables and scoped locking. The approximation is based on the C++11 working draft N3000. The major differences are:</p>
<ul type="disc">
<li><p>The implementation uses the <samp class="codeph">tbb::tick_count</samp> interface instead of the C++11 <chrono> interface. </p>
</li>
<li><p>The implementation throws <samp class="codeph">std::runtime_error </samp>instead of a C++11 std::system_error.</p>
</li>
<li><p>The implementation omits or approximates features requiring C++11 language support such as <samp class="codeph">constexpr</samp> or <samp class="codeph">explicit</samp> operators.</p>
</li>
<li><p>The implementation works in conjunction with tbb::mutex wherever the C++11 specification calls for a <samp class="codeph">std::mutex</samp>. </p>
</li>
</ul>
<p>See the working draft N3000 for a detailed descriptions of the members.</p>
<div class="Note"><h3 class="NoteTipHead">
Caution</h3><p>Implementations may change if the C++11 specification changes. </p>
</div>
<div class="Note"><h3 class="NoteTipHead">
Caution</h3><p>When support for <samp class="codeph">std::system_error</samp> becomes available, implementations may throw <samp class="codeph">std::system_error</samp> instead of <samp class="codeph">std::runtime_error</samp>.</p>
</div>
<p>The library defines the C++11 interfaces in namespace std, not namespace tbb, as explained in Section std Namespace.</p>
</div>
<div class="section"><h2 class="sectiontitle">Header</h2>
<pre>#include "tbb/compat/condition_variable"</pre>
</div>
<div class="section"><h2 class="sectiontitle">Members</h2>
<pre>namespace std {
struct defer_lock_t { };
struct try_to_lock_t { };
struct adopt_lock_t { };
const defer_lock_t defer_lock = {};
const try_to_lock_t try_to_lock = {};
const adopt_lock_t adopt_lock = {};
template<typename M>
class lock_guard {
public:
typedef M mutex_type;
explicit lock_guard(mutex_type& m);
lock_guard(mutex_type& m, adopt_lock_t);
~lock_guard();
};
template<typename M>
class unique_lock: no_copy {
public:
typedef M mutex_type;
unique_lock();
explicit unique_lock(mutex_type& m);
unique_lock(mutex_type& m, defer_lock_t);
unique_lock(mutex_type& m, try_to_lock_t));
unique_lock(mutex_type& m, adopt_lock_t);
unique_lock(mutex_type& m, const tick_count::interval_t &i);
~unique_lock();
void lock();
bool try_lock();
bool try_lock_for( const tick_count::interval_t &i );
void unlock();
void swap(unique_lock& u);
mutex_type* release();
bool owns_lock() const;
operator bool() const;
mutex_type* mutex() const;
};
template<typename M>
void swap(unique_lock<M>& x, unique_lock<M>& y);
enum cv_status {no_timeout, timeout};
class condition_variable : no_copy {
public:
condition_variable();
~condition_variable();
void notify_one();
void notify_all();
void wait(unique_lock<mutex>& lock);
template <class Predicate>
void wait(unique_lock<mutex>& lock, Predicate pred);
cv_status wait_for(unique_lock<mutex>& lock,
const tick_count::interval_t& i);
template<typename Predicate>
bool wait_for(unique_lock<mutex>& lock,
const tick_count::interval_t &i,
Predicate pred);
typedef <em>implementation-defined</em> native_handle_type;
native_handle_type native_handle();
};
} // namespace std
</pre></div>
</div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="../../reference/synchronization.htm">Synchronization</a></div>
</div>
<div class="See Also">
<h2>See Also</h2>
<div class="linklist">
<div><a href="../general_conventions/namespaces.htm">Namespace std</a></div></div>
</div>
</body>
</html>
|