iLogtail中的自旋锁基于std::atomic_flag实现,使用了memory_order_acquire和memory_order_release两种内存序。try_lock()方法调用test_and_set(std::memory_order_acquire)尝试获取锁,unlock()方法调用clear(std::memory_order_release)释放锁。lock()方法在获取失败时通过循环重试并配合boost::detail::yield(k)进行退避,避免忙等浪费CPU。这种设计比使用默认的memory_order_seq_cst性能更好,因为acquire-release语义已足够保证临界区数据的可见性,无需更强的全序一致性。
加载中...