equal
deleted
inserted
replaced
70 do { |
70 do { |
71 const bm_word_t new_val = old_val | mask; |
71 const bm_word_t new_val = old_val | mask; |
72 if (new_val == old_val) { |
72 if (new_val == old_val) { |
73 return false; // Someone else beat us to it. |
73 return false; // Someone else beat us to it. |
74 } |
74 } |
75 const bm_word_t cur_val = Atomic::cmpxchg(new_val, addr, old_val, memory_order); |
75 const bm_word_t cur_val = Atomic::cmpxchg(addr, old_val, new_val, memory_order); |
76 if (cur_val == old_val) { |
76 if (cur_val == old_val) { |
77 return true; // Success. |
77 return true; // Success. |
78 } |
78 } |
79 old_val = cur_val; // The value changed, try again. |
79 old_val = cur_val; // The value changed, try again. |
80 } while (true); |
80 } while (true); |
89 do { |
89 do { |
90 const bm_word_t new_val = old_val & mask; |
90 const bm_word_t new_val = old_val & mask; |
91 if (new_val == old_val) { |
91 if (new_val == old_val) { |
92 return false; // Someone else beat us to it. |
92 return false; // Someone else beat us to it. |
93 } |
93 } |
94 const bm_word_t cur_val = Atomic::cmpxchg(new_val, addr, old_val, memory_order); |
94 const bm_word_t cur_val = Atomic::cmpxchg(addr, old_val, new_val, memory_order); |
95 if (cur_val == old_val) { |
95 if (cur_val == old_val) { |
96 return true; // Success. |
96 return true; // Success. |
97 } |
97 } |
98 old_val = cur_val; // The value changed, try again. |
98 old_val = cur_val; // The value changed, try again. |
99 } while (true); |
99 } while (true); |