NAME¶
ck_pr_rtm_begin,
  
ck_pr_rtm_end,
  
ck_pr_rtm_abort,
  
ck_pr_rtm_test —
restricted transactional memory
LIBRARY¶
Concurrency Kit (libck, -lck)
SYNOPSIS¶
#include
  <ck_pr.h>
unsigned int
ck_pr_rtm_begin(
void);
void
ck_pr_rtm_end(
void);
void
ck_pr_rtm_abort(
const
  unsigned int status);
bool
ck_pr_rtm_test(
void);
DESCRIPTION¶
These family of functions implement support for restricted transactional memory,
  if available on the underlying platform. Currently, support is only provided
  for Intel Haswell and newer x86 microarchitectures that have the TSX-NI
  feature.
The 
ck_pr_rtm_begin() function returns
  CK_PR_RTM_STARTED if a transaction was successfully started. In case of an
  abort, either internal (through a ck_pr_rtm_abort) or external, program flow
  will return to the point which the function was called except the return value
  will consist of a bitmap with one or more of the following bits set:
  - CK_PR_RTM_EXPLICIT
 
  - Set if the transactionally was explicitly aborted through
      
ck_pr_rtm_abort(). 
  - CK_PR_RTM_RETRY
 
  - Set if the transaction failed but can still succeed if retried.
 
  - CK_PR_RTM_CONFLICT
 
  - The transaction failed due to a conflict in one of the memory addresses
      that are part of the working set of the transaction.
 
  - CK_PR_RTM_CAPACITY
 
  - Set if the architecture-defined transaction size limit was exceeded.
 
  - CK_PR_RTM_DEBUG
 
  - Set if a hardware breakpoint was triggered.
 
  - CK_PR_RTM_NESTED
 
  - Set if a nested transaction failed.
 
The user is also able to specify a one byte abort status by calling
  
ck_pr_rtm_abort(). This status byte can be
  extracted by calling the 
CK_PR_RTM_CODE()
  function with the return value of
  
ck_pr_rtm_begin() as an argument. The
  return value of 
CK_PR_RTM_CODE() will be
  the value of this status byte. For additional information, please see the
  Intel instruction set manuals.
SEE ALSO¶
ck_pr_fence_load(3),
  
ck_pr_fence_load_depends(3),
  
ck_pr_fence_store(3),
  
ck_pr_fence_memory(3),
  
ck_pr_load(3),
  
ck_pr_store(3),
  
ck_pr_fas(3),
  
ck_pr_faa(3),
  
ck_pr_inc(3),
  
ck_pr_dec(3),
  
ck_pr_neg(3),
  
ck_pr_not(3),
  
ck_pr_sub(3),
  
ck_pr_and(3),
  
ck_pr_or(3),
  
ck_pr_xor(3),
  
ck_pr_add(3),
  
ck_pr_btc(3),
  
ck_pr_bts(3),
  
ck_pr_btr(3)
Additional information available at 
http://concurrencykit.org/