通过cas去实现自旋锁
flag的0表示现在没上锁,1表示已经上锁了
- static int flag{0};
- //0表示没有锁,1表示锁了
-
- int cas(int *ptr,int newp)
- {
- int old=*ptr;
- *ptr=newp;
- return old;
- }
-
- void lock()
- {
- while(cas(&flag,1)==0){
- // cout<<"lock"<
- // cout<
- }
- }
- void unlock()
- {
- flag=0;
- // cout<<"unlock"<
- }
加上个测试代码
- static int num=0;
- void test1()
- {
- lock();
- cout<<"test1 start"<
- for(int i=0;i<5;++i)
- {
- num++;
- }
- cout<<"test1 end"<
- unlock();
- }
- void test2()
- {
- lock();
- cout<<"test2 start"<
- for(int i=0;i<10;++i)
- {
- num++;
- }
- cout<<"test2 end"<
- unlock();
-
- }
- int mai
-
相关阅读:
零代码编程:用ChatGPT批量提取flash动画swf文件中的mp3
数据分析实战应用案例精讲-【概念篇】用户画像(最终篇)(附实战案例)
离散PID控制
QEMU开发入门
谈谈 PolarDB-X 在读写分离场景的实践
Stable Diffusion进阶玩法说明
windows环境hadoop报错‘D:\Program‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
Unity - 实现模型动态伸长缩短,贴图不变形(材质球参数篇)
Java学习笔记(十四)
linux统计日志文件中IP出现的次数,显示次数最多的前十,grep,cat,sort,uniq,head,cut,awk
-
原文地址:https://blog.csdn.net/weixin_51609435/article/details/131811850