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
  }
}
Beispiel #3
0
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;
}