来源

High Performance

这个系列的原文

Talks in C++ Conference

其他相关资料

自旋锁:更快的 fast path 和更慢的 slow path。

互斥锁:更经济的 slow path 和更慢的 fast path。(即使上锁成功也需要进出内核 syscall)

Futex (Fast Userspace muTexes): Fast path 上锁成功立即返回,slow path 上锁失败执行系统调用睡眠

轻量级锁

并非锁本身慢,而是对锁的竞争导致程序慢。使用轻量级锁可以有效提高性能。

现有实现

自己实现(用户空间下)

基本方法

具体实现

Benaphore

#include <windows.h>
#include <intrin.h>

class Benaphore
{
private:
	LONG m_counter;
	HANDLE m_semaphore;

public:
	Benaphore()
	{
		m_counter = 0;
		m_semaphore = CreateSeamaphore(NULL, 0, 1, NULL);
	}

	~Benaphore()
	{
		CloseHandle(m_semaphore);
	}

	void Lock()
	{
		if (_InterlockedIncrement(&m_counter) > 1)
		{
			WaitForSingleObject(m_semaphore, INFINITE);
		}
	}

	void UnLock()
	{
		if (_InterlockedDecrement(&m_counter) > 0)
		{
			ReleaseSeamphore(m_semaphore, 1, NULL);
		}
	}
}

spin lock

int flag = 0;
void lock()
{
	while(__sync_lock_test_and_set(&flag, 1)) {
	}
}

void unlock()
{
	__sync_lock_release(&flag, 0);
}