This uses the built-in atomic functions. The test program is: ```c++ #include "XrdSys/XrdSysAtomics.hh" int a; void val_set(int v) { AtomicCAS(a, a, v); } int val_get() { return AtomicGet(a); } ``` The assembler code for x86_64 is as expected: ```asm _Z7val_seti: .cfi_startproc movl %edi, a(%rip) ret .cfi_endproc _Z7val_getv: .cfi_startproc movl a(%rip), %eax ret .cfi_endproc ``` While for ARM it looks like this: ```asm _Z7val_seti: .fnstart .LFB0: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L2 str r0, [r3, #0] bx lr .L3: .align 2 .L2: .word .LANCHOR0 .cantunwind .fnend _Z7val_getv: .fnstart .LFB1: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L5 ldr r0, [r3, #0] bx lr .L6: .align 2 .L5: .word .LANCHOR0 .cantunwind .fnend ``` So, the conclusion is that for x86_64 there is no difference whether we use or not `__sync_fetch*`. Obviously this also works without c++11. Let me know which one you prefer between this one and #265. You can view, comment on, or merge this pull request online at: https://github.com/xrootd/xrootd/pull/266 -- Commit Summary -- * XrdCl: Provide atomicity for PostMaster value using built-in functions -- File Changes -- M src/XrdCl/XrdClDefaultEnv.cc (24) -- Patch Links -- https://github.com/xrootd/xrootd/pull/266.patch https://github.com/xrootd/xrootd/pull/266.diff --- Reply to this email directly or view it on GitHub: https://github.com/xrootd/xrootd/pull/266 ######################################################################## Use REPLY-ALL to reply to list To unsubscribe from the XROOTD-DEV list, click the following link: https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1