void shared_spinlock::lock() { long v = flag_.load(); for (;;) { if (v != 0) { v = flag_.load(); } else if (cas_weak(&flag_, &v, min_long())) { return; } // else: next iteration } }
void shared_spinlock::lock() { long v = m_flag.load(); for (;;) { if (v != 0) { // std::this_thread::yield(); v = m_flag.load(); } else if (m_flag.compare_exchange_weak(v, min_long())) { return; } // else: next iteration } }
char *flag_l(t_string *string, short base) { long long int tmp; tmp = get_long_int(string); if (tmp < -9223372036854775807) return (min_long(string, base)); if (tmp < 0) { tmp = -tmp; string->is_negative = 1; } if (base == 8) return (ft_itoabase(tmp, "01234567")); else if (base == 10) return (ft_litoa(tmp)); else if (base == 16) return (ft_itoabase(tmp, "0123456789abcdef")); else if (base == 32) return (ft_itoabase(tmp, "0123456789ABCDEF")); return (NULL); }
bool shared_spinlock::try_lock() { long v = m_flag.load(); return (v == 0) ? m_flag.compare_exchange_weak(v, min_long()) : false; }
bool shared_spinlock::try_lock() { long v = flag_.load(); return (v == 0) ? cas_weak(&flag_, &v, min_long()) : false; }