index.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 2011-2017 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.2 or
  6. any later version published by the Free Software Foundation; with no
  7. Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
  8. A copy of the license is included in the section entitled "GNU
  9. Free Documentation License". -->
  10. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  11. <head>
  12. <title>GNU libitm: Top</title>
  13. <meta name="description" content="GNU libitm: Top">
  14. <meta name="keywords" content="GNU libitm: Top">
  15. <meta name="resource-type" content="document">
  16. <meta name="distribution" content="global">
  17. <meta name="Generator" content="makeinfo">
  18. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  19. <link href="#Top" rel="start" title="Top">
  20. <link href="Library-Index.html#Library-Index" rel="index" title="Library Index">
  21. <link href="#SEC_Contents" rel="contents" title="Table of Contents">
  22. <link href="../dir/index.html" rel="up" title="(dir)">
  23. <link href="Enabling-libitm.html#Enabling-libitm" rel="next" title="Enabling libitm">
  24. <style type="text/css">
  25. <!--
  26. a.summary-letter {text-decoration: none}
  27. blockquote.smallquotation {font-size: smaller}
  28. div.display {margin-left: 3.2em}
  29. div.example {margin-left: 3.2em}
  30. div.indentedblock {margin-left: 3.2em}
  31. div.lisp {margin-left: 3.2em}
  32. div.smalldisplay {margin-left: 3.2em}
  33. div.smallexample {margin-left: 3.2em}
  34. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  35. div.smalllisp {margin-left: 3.2em}
  36. kbd {font-style:oblique}
  37. pre.display {font-family: inherit}
  38. pre.format {font-family: inherit}
  39. pre.menu-comment {font-family: serif}
  40. pre.menu-preformatted {font-family: serif}
  41. pre.smalldisplay {font-family: inherit; font-size: smaller}
  42. pre.smallexample {font-size: smaller}
  43. pre.smallformat {font-family: inherit; font-size: smaller}
  44. pre.smalllisp {font-size: smaller}
  45. span.nocodebreak {white-space:nowrap}
  46. span.nolinebreak {white-space:nowrap}
  47. span.roman {font-family:serif; font-weight:normal}
  48. span.sansserif {font-family:sans-serif; font-weight:normal}
  49. ul.no-bullet {list-style: none}
  50. -->
  51. </style>
  52. </head>
  53. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  54. <h1 class="settitle" align="center">GNU libitm</h1>
  55. <a name="SEC_Overview"></a>
  56. <h2 class="shortcontents-heading">Short Table of Contents</h2>
  57. <div class="shortcontents">
  58. <ul class="no-bullet">
  59. <li><a name="stoc-Enabling-libitm-1" href="#toc-Enabling-libitm-1">1 Enabling libitm</a></li>
  60. <li><a name="stoc-C_002fC_002b_002b-Language-Constructs-for-TM-1" href="#toc-C_002fC_002b_002b-Language-Constructs-for-TM-1">2 C/C++ Language Constructs for TM</a></li>
  61. <li><a name="stoc-The-libitm-ABI-1" href="#toc-The-libitm-ABI-1">3 The libitm ABI</a></li>
  62. <li><a name="stoc-Internals-1" href="#toc-Internals-1">4 Internals</a></li>
  63. <li><a name="stoc-GNU-Free-Documentation-License-1" href="#toc-GNU-Free-Documentation-License-1">GNU Free Documentation License</a></li>
  64. <li><a name="stoc-Library-Index-1" href="#toc-Library-Index-1">Library Index</a></li>
  65. </ul>
  66. </div>
  67. <a name="SEC_Contents"></a>
  68. <h2 class="contents-heading">Table of Contents</h2>
  69. <div class="contents">
  70. <ul class="no-bullet">
  71. <li><a name="toc-Enabling-libitm-1" href="Enabling-libitm.html#Enabling-libitm">1 Enabling libitm</a></li>
  72. <li><a name="toc-C_002fC_002b_002b-Language-Constructs-for-TM-1" href="C_002fC_002b_002b-Language-Constructs-for-TM.html#C_002fC_002b_002b-Language-Constructs-for-TM">2 C/C++ Language Constructs for TM</a></li>
  73. <li><a name="toc-The-libitm-ABI-1" href="The-libitm-ABI.html#The-libitm-ABI">3 The libitm ABI</a>
  74. <ul class="no-bullet">
  75. <li><a name="toc-_005bNo-changes_005d-Objectives" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Objectives">3.1 [No changes] Objectives</a></li>
  76. <li><a name="toc-_005bNo-changes_005d-Non_002dobjectives" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Non_002dobjectives">3.2 [No changes] Non-objectives</a></li>
  77. <li><a name="toc-Library-design-principles" href="The-libitm-ABI.html#Library-design-principles">3.3 Library design principles</a>
  78. <ul class="no-bullet">
  79. <li><a name="toc-_005bNo-changes_005d-Calling-conventions" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Calling-conventions">3.3.1 [No changes] Calling conventions</a></li>
  80. <li><a name="toc-_005bNo-changes_005d-TM-library-algorithms" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-TM-library-algorithms">3.3.2 [No changes] TM library algorithms</a></li>
  81. <li><a name="toc-_005bNo-changes_005d-Optimized-load-and-store-routines" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Optimized-load-and-store-routines">3.3.3 [No changes] Optimized load and store routines</a></li>
  82. <li><a name="toc-_005bNo-changes_005d-Aligned-load-and-store-routines" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Aligned-load-and-store-routines">3.3.4 [No changes] Aligned load and store routines</a></li>
  83. <li><a name="toc-Data-logging-functions" href="The-libitm-ABI.html#Data-logging-functions">3.3.5 Data logging functions</a></li>
  84. <li><a name="toc-_005bNo-changes_005d-Scatter_002fgather-calls" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Scatter_002fgather-calls">3.3.6 [No changes] Scatter/gather calls</a></li>
  85. <li><a name="toc-_005bNo-changes_005d-Serial-and-irrevocable-mode" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Serial-and-irrevocable-mode">3.3.7 [No changes] Serial and irrevocable mode</a></li>
  86. <li><a name="toc-_005bNo-changes_005d-Transaction-descriptor" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Transaction-descriptor">3.3.8 [No changes] Transaction descriptor</a></li>
  87. <li><a name="toc-Store-allocation" href="The-libitm-ABI.html#Store-allocation">3.3.9 Store allocation</a></li>
  88. <li><a name="toc-_005bNo-changes_005d-Naming-conventions" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Naming-conventions">3.3.10 [No changes] Naming conventions</a></li>
  89. <li><a name="toc-Function-pointer-encryption" href="The-libitm-ABI.html#Function-pointer-encryption">3.3.11 Function pointer encryption</a></li>
  90. </ul></li>
  91. <li><a name="toc-Types-and-macros-list" href="The-libitm-ABI.html#Types-and-macros-list">3.4 Types and macros list</a></li>
  92. <li><a name="toc-Function-list" href="The-libitm-ABI.html#Function-list">3.5 Function list</a>
  93. <ul class="no-bullet">
  94. <li><a name="toc-Initialization-and-finalization-functions" href="The-libitm-ABI.html#Initialization-and-finalization-functions">3.5.1 Initialization and finalization functions</a></li>
  95. <li><a name="toc-_005bNo-changes_005d-Version-checking" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Version-checking">3.5.2 [No changes] Version checking</a></li>
  96. <li><a name="toc-_005bNo-changes_005d-Error-reporting" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Error-reporting">3.5.3 [No changes] Error reporting</a></li>
  97. <li><a name="toc-_005bNo-changes_005d-inTransaction-call" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-inTransaction-call">3.5.4 [No changes] inTransaction call</a></li>
  98. <li><a name="toc-State-manipulation-functions" href="The-libitm-ABI.html#State-manipulation-functions">3.5.5 State manipulation functions</a></li>
  99. <li><a name="toc-_005bNo-changes_005d-Source-locations" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Source-locations">3.5.6 [No changes] Source locations</a></li>
  100. <li><a name="toc-Starting-a-transaction" href="The-libitm-ABI.html#Starting-a-transaction">3.5.7 Starting a transaction</a>
  101. <ul class="no-bullet">
  102. <li><a name="toc-Transaction-code-properties" href="The-libitm-ABI.html#Transaction-code-properties">3.5.7.1 Transaction code properties</a></li>
  103. <li><a name="toc-_005bNo-changes_005d-Windows-exception-state" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Windows-exception-state">3.5.7.2 [No changes] Windows exception state</a></li>
  104. <li><a name="toc-_005bNo-changes_005d-Other-machine-state" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Other-machine-state">3.5.7.3 [No changes] Other machine state</a></li>
  105. <li><a name="toc-_005bNo-changes_005d-Results-from-beginTransaction" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Results-from-beginTransaction">3.5.7.4 [No changes] Results from beginTransaction</a></li>
  106. </ul></li>
  107. <li><a name="toc-Aborting-a-transaction" href="The-libitm-ABI.html#Aborting-a-transaction">3.5.8 Aborting a transaction</a></li>
  108. <li><a name="toc-Committing-a-transaction" href="The-libitm-ABI.html#Committing-a-transaction">3.5.9 Committing a transaction</a></li>
  109. <li><a name="toc-Exception-handling-support" href="The-libitm-ABI.html#Exception-handling-support">3.5.10 Exception handling support</a></li>
  110. <li><a name="toc-_005bNo-changes_005d-Transition-to-serial_002d_002dirrevocable-mode" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Transition-to-serial_002d_002dirrevocable-mode">3.5.11 [No changes] Transition to serial&ndash;irrevocable mode</a></li>
  111. <li><a name="toc-_005bNo-changes_005d-Data-transfer-functions" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Data-transfer-functions">3.5.12 [No changes] Data transfer functions</a></li>
  112. <li><a name="toc-_005bNo-changes_005d-Transactional-memory-copies" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Transactional-memory-copies">3.5.13 [No changes] Transactional memory copies</a></li>
  113. <li><a name="toc-Transactional-versions-of-memmove" href="The-libitm-ABI.html#Transactional-versions-of-memmove">3.5.14 Transactional versions of memmove</a></li>
  114. <li><a name="toc-_005bNo-changes_005d-Transactional-versions-of-memset" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Transactional-versions-of-memset">3.5.15 [No changes] Transactional versions of memset</a></li>
  115. <li><a name="toc-_005bNo-changes_005d-Logging-functions" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Logging-functions">3.5.16 [No changes] Logging functions</a></li>
  116. <li><a name="toc-User_002dregistered-commit-and-undo-actions" href="The-libitm-ABI.html#User_002dregistered-commit-and-undo-actions">3.5.17 User-registered commit and undo actions</a></li>
  117. <li><a name="toc-_005bNew_005d-Transactional-indirect-calls" href="The-libitm-ABI.html#g_t_005bNew_005d-Transactional-indirect-calls">3.5.18 [New] Transactional indirect calls</a></li>
  118. <li><a name="toc-_005bNew_005d-Transactional-dynamic-memory-management" href="The-libitm-ABI.html#g_t_005bNew_005d-Transactional-dynamic-memory-management">3.5.19 [New] Transactional dynamic memory management</a></li>
  119. </ul></li>
  120. <li><a name="toc-_005bNo-changes_005d-Future-Enhancements-to-the-ABI" href="The-libitm-ABI.html#g_t_005bNo-changes_005d-Future-Enhancements-to-the-ABI">3.6 [No changes] Future Enhancements to the ABI</a></li>
  121. <li><a name="toc-Sample-code" href="The-libitm-ABI.html#Sample-code">3.7 Sample code</a></li>
  122. <li><a name="toc-_005bNew_005d-Memory-model" href="The-libitm-ABI.html#g_t_005bNew_005d-Memory-model">3.8 [New] Memory model</a></li>
  123. </ul></li>
  124. <li><a name="toc-Internals-1" href="Internals.html#Internals">4 Internals</a>
  125. <ul class="no-bullet">
  126. <li><a name="toc-TM-methods-and-method-groups" href="Internals.html#TM-methods-and-method-groups">4.1 TM methods and method groups</a>
  127. <ul class="no-bullet">
  128. <li><a name="toc-TM-method-life-cycle" href="Internals.html#TM-method-life-cycle">4.1.1 TM method life cycle</a></li>
  129. <li><a name="toc-Selecting-the-default-method" href="Internals.html#Selecting-the-default-method">4.1.2 Selecting the default method</a></li>
  130. </ul></li>
  131. <li><a name="toc-Nesting_003a-flat-vs_002e-closed" href="Internals.html#Nesting_003a-flat-vs_002e-closed">4.2 Nesting: flat vs. closed</a></li>
  132. <li><a name="toc-Locking-conventions" href="Internals.html#Locking-conventions">4.3 Locking conventions</a>
  133. <ul class="no-bullet">
  134. <li><a name="toc-State_002dto_002dlock-mapping" href="Internals.html#State_002dto_002dlock-mapping">4.3.1 State-to-lock mapping</a></li>
  135. <li><a name="toc-Lock-acquisition-order" href="Internals.html#Lock-acquisition-order">4.3.2 Lock acquisition order</a></li>
  136. <li><a name="toc-Serial-lock-implementation" href="Internals.html#Serial-lock-implementation">4.3.3 Serial lock implementation</a></li>
  137. <li><a name="toc-Reentrancy" href="Internals.html#Reentrancy">4.3.4 Reentrancy</a></li>
  138. <li><a name="toc-Privatization-safety" href="Internals.html#Privatization-safety">4.3.5 Privatization safety</a></li>
  139. <li><a name="toc-Progress-guarantees" href="Internals.html#Progress-guarantees">4.3.6 Progress guarantees</a></li>
  140. </ul></li>
  141. </ul></li>
  142. <li><a name="toc-GNU-Free-Documentation-License-1" href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>
  143. <ul class="no-bullet">
  144. <li><a name="toc-ADDENDUM_003a-How-to-use-this-License-for-your-documents" href="GNU-Free-Documentation-License.html#ADDENDUM_003a-How-to-use-this-License-for-your-documents">ADDENDUM: How to use this License for your documents</a></li>
  145. </ul></li>
  146. <li><a name="toc-Library-Index-1" href="Library-Index.html#Library-Index">Library Index</a></li>
  147. </ul>
  148. </div>
  149. <a name="Top"></a>
  150. <div class="header">
  151. <p>
  152. Next: <a href="Enabling-libitm.html#Enabling-libitm" accesskey="n" rel="next">Enabling libitm</a>, Up: <a href="../dir/index.html" accesskey="u" rel="up">(dir)</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Library-Index.html#Library-Index" title="Index" rel="index">Index</a>]</p>
  153. </div>
  154. <hr>
  155. <a name="Introduction"></a>
  156. <h1 class="top">Introduction</h1>
  157. <a name="index-Introduction"></a>
  158. <p>This manual documents the usage and internals of libitm, the GNU Transactional
  159. Memory Library. It provides transaction support for accesses to a process&rsquo;
  160. memory, enabling easy-to-use synchronization of accesses to shared memory by
  161. several threads.
  162. </p>
  163. <table class="menu" border="0" cellspacing="0">
  164. <tr><td align="left" valign="top">&bull; <a href="Enabling-libitm.html#Enabling-libitm" accesskey="1">Enabling libitm</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to enable libitm for your applications.
  165. </td></tr>
  166. <tr><td align="left" valign="top">&bull; <a href="C_002fC_002b_002b-Language-Constructs-for-TM.html#C_002fC_002b_002b-Language-Constructs-for-TM" accesskey="2">C/C++ Language Constructs for TM</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
  167. Notes on the language-level interface supported
  168. by gcc.
  169. </td></tr>
  170. <tr><td align="left" valign="top">&bull; <a href="The-libitm-ABI.html#The-libitm-ABI" accesskey="3">The libitm ABI</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes on the external ABI provided by libitm.
  171. </td></tr>
  172. <tr><td align="left" valign="top">&bull; <a href="Internals.html#Internals" accesskey="4">Internals</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notes on libitm&rsquo;s internal synchronization.
  173. </td></tr>
  174. <tr><td align="left" valign="top">&bull; <a href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License" accesskey="5">GNU Free Documentation License</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
  175. How you can copy and share this manual.
  176. </td></tr>
  177. <tr><td align="left" valign="top">&bull; <a href="Library-Index.html#Library-Index" accesskey="6">Library Index</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of this documentation.
  178. </td></tr>
  179. </table>
  180. <hr>
  181. <div class="header">
  182. <p>
  183. Next: <a href="Enabling-libitm.html#Enabling-libitm" accesskey="n" rel="next">Enabling libitm</a>, Up: <a href="../dir/index.html" accesskey="u" rel="up">(dir)</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Library-Index.html#Library-Index" title="Index" rel="index">Index</a>]</p>
  184. </div>
  185. </body>
  186. </html>