C/C++ 怎么样自己实现一个互斥锁, 教授帮你轻松混面试!

本文介绍了如何在不使用汇编语言的情况下,利用C++标准库中的std::atomic_flag来实现互斥锁。通过讲解一个简单的教授锁(jiaoshouLock)的实现过程,展示了如何借助原子操作避免并发编程中的竞争条件问题。
摘要由CSDN通过智能技术生成

据说有一些变态的公司,面试题是要你自己实现一个互斥锁。

讲道理这个题目还是蛮变态的,互斥锁这玩意一听就非常底层,感觉不用汇编指令那套东西完全是办不到的。

但问题是汇编语言我不熟悉啊。作为码农界的转行程序员,能把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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值