据说有一些变态的公司,面试题是要你自己实现一个互斥锁。
讲道理这个题目还是蛮变态的,互斥锁这玩意一听就非常底层,感觉不用汇编指令那套东西完全是办不到的。
但问题是汇编语言我不熟悉啊。作为码农界的转行程序员,能把c语言,c++语法搞明白就很不容易了,汇编语言勉强看懂还行,要求精通,只能QNMB。
本来已经决定放弃,突然发现c++标准中还有 std::atomic 这么个模板类。瞬间想到,其实还是可以用语言提供的另外一些特性,来规避掉被迫用汇编实现。
互斥锁的精髓在于原子操作,c++标准库中恰好提供了一些实现原子操作的类。这些类正好帮你来实现互斥锁。
互斥锁关键在于要把标志变量的读和写综合到一个原子操作中,一阵搜索,发现这么个类 std::atomic_flag 完全符合要求。所以实现就靠它了。
直接给出代码,这是个教授锁的头文件,设计成STL那样,include就能用。(jiaoshouLock.h)
#ifndef JIAOSHOULOCK
#define JIAOSHOULOCK
#include <atomic>
class jiaoshouLock{
private:
std::atomic_flag alock = ATOMIC_FLAG_INIT;
public:
void lock(){
while(true == alock.te