【操作系统】自旋锁实现&&自旋锁原理(亲测可用)

原理

自旋锁是一种基于忙等待的锁,它在等待锁的过程中不会阻塞线程,而是通过循环不断地检查锁的状态,直到获取到锁为止。自旋锁适用于锁的持有时间很短的情况,因为在等待锁的过程中,线程会一直占用CPU资源,如果锁的持有时间很长,那么自旋锁会浪费大量的CPU资源。


#include 

#include "../base/debug_view.h"

class Spinlock {
private:
	std::atomic_flag *at_flag;

public:
	Spinlock()
	{
		zz_log("constructor init");
		//由于std::atomic_flag类的拷贝构造函数被删除。
		//std::atomic_flag是一个特殊的原子类型,它被设计为不可拷贝的,因此拷贝构造函数被删除了。
		// 所以这里定义为共享对象,多个线程进行引用,而不是进行拷贝、
		std::atomic_flag lock_flag = ATOMIC_FLAG_INIT;
		at_flag = &lock_flag;
	}

	void lock()
	{
		zz_log("我来抢劫锁啦!!!");

		while (at_flag->test_and_set(std::memory_order_acquire))
		{
			zz_log("未获取到,虎视眈眈,轮询等待...");
		}

		zz_log("OK, 拿到了!!!");
	}

	void unlock()
	{
		zz_log("吃饱啦,不需要啦,可以放下锁啦!!!");
		at_flag->clear(std::memory_order_release);
	}
};

你可能感兴趣的:(操作系统,服务器,linux,windows)