自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 一个简易读写锁

发点牢骚:csdn上实在找不到读并行写互斥的读写锁。。所以自己写了一个class rw_mutex{private:std::condition_variable __cond_v;std::atomic_int __r_threads;std::mutex __inner_lock;std::atomic_bool __w_thread;public:rw_mutex():__r_threads(0),__w_thread(0){}void r_lock();voi

2022-05-14 11:29:48 119

原创 记录下原子操作的同步以及内存顺序

先解释几个点:0.1、同步关系synchronizes-with 比如两条指令A和B是同步关系,则A是B的条件;A发生后B才能继续,且A之前的动作都发生在B前0.2、先后关系happens-before:A之前的动作X,B之后的动作Y,X在Y前面。类似同步关系1、memory_order_release的对象,会让其他所有线程,以memory_order_require方式看到的结果一致2、memory_order_acquire会阻止原子操作之后的所有读和写被重排到原子操作之前memo

2022-05-08 15:52:41 269

原创 cpp并发实战 第四章小结

这篇文章的作用是提取这一节中重要的精华。0、cond_v没啥好说的。用wait做锁和cpu的让出,和单纯的等待条件满足---------------1、future<T>fu=async(fu);启动一个线程做异步任务;或者直接执行任务,同步。可选以函数的return作为阻塞get()结束的标志-----2、package_task<T()> task(fn);task();把一个任务包装。可以被future获取 fu=task.get_futu

2022-05-07 15:14:03 197

原创 promise.then的一个小细节

先上结论:在newPromise里面res另一个promise,这个promise在then里面会被【展平】。展平同样是异步的看下面的代码:var p3=new Promise(function(res,rej){res('b');});var p1=new Promise(function(res,rej){res(p3);});var p2=new Promise(function(res,rej){res('a');});p1.then(function

2022-04-18 20:38:27 53

原创 今天我再来讲一下js的变量名引用吧。顺便补充一下上次的闭包。

闭包:一个作用域内的function或object对象被引用,导致该作用域的其他变量也持续存在,而不是随着作用域的结束而销毁。简洁明了。————————————迁入正题:js中,你用到的所有变量名,都在栈区。而复杂对象的内存都在堆区。但你无法直接修改堆区的复杂对象,只能通过【栈区引用.堆区属性】来修改堆区的内存。这里借用一下c的概念:比如有个list,这时候你手上只有一个list*lp=链表头,如果你想要改链表的结构,那就只能通过lp->next=xxxx来修改。即 栈区指

2022-04-03 10:59:18 1732

原创 今天讲一下我对js闭包和内存的个人理解吧

<h5>我tm真是服了</h5>我觉得这不就是个cpp里面智能指针应用计数的概念么,咋就能扯那么多高级名词呢hhh发个牢骚,当然我的理解很可能也不对现附上一段demon吧:function fc(){let lc=1;function fc1(){lc++;console.log(lc);return lc;}return fc1;}var lp=fc();lp();lp();lp=fc();lp();这段的输出

2022-03-30 18:29:32 1232

原创 洛谷P1063

demon:#include<iostream>using namespace std;int arr[200],n;int dp[200][200],fdp[200][200];//前小后大顺序,前大后小逆序int sch(int l,int r){ if(dp[l][r])return dp[l][r]; for(int i=l+1;i<r;i++){ dp[l][r]=max(sch(l,i)+sch(i,r)+arr[l]*arr[i]*...

2022-03-11 20:41:06 60

原创 对快速排序时间复杂度的证明

取一个随机数x,把数据分割成集合U,V,其中U都小与x,V都大于x --------这一步操作进行了n次计算,n是数据总数再继续对U,V做相同的操作,知道分割成总数为1的集合 ----------所以第二层递归树进行了nU+nV次计算n个数据中随机取一个,这个数可能是第一小数,第二小……第k小。情况等可能。故 共有n个数的计算次数的期望En=((E0+En-1)+(E1+En-2)……+(En-1+E0))/n重复的子结构,递归!demon如下。注意输出的结果是 res...

2022-01-05 11:27:47 1027

原创 leetcode p940不同的子序列

先上demon(代码)classSolution{public:intdistinctSubseqII(strings){longlongharsh[2001][150]={0};longlongcount[2001]={0};count[0]=1;for(chari='a';i<='z';i++)harsh[0][(int)i]=1;fo...

2022-01-01 16:22:11 3745

原创 洛谷2047

没啥好说的,就解释一下路数的计算吧。在第k-1阶floyd方阵中令从a到b的路数表示为count[a][b][k-1]那么第k阶的时候自然有:count[a][b][k](+)=count[a][k][k-1]*count[k][b][k-1]因为小于等于k的floyd方阵中,a到k的最短路最多一定是k-1阶,不可能是k(不经过自己。。)因此呢,就有了上面这一行~之后么,状态压缩一下就成了:count[a][b](+)=count[a][k]*count[k][b]磨了一

2021-12-31 15:14:33 222

原创 洛谷P6175最小环

先附上demon(代码,hhh)#include<iostream>using namespace std;int main(){ long long int n,m; cin>>n>>m; long long int arr[100][100]={0}; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ arr[i][j]=99999; }...

2021-12-27 15:04:15 158

原创 xdoj的构造表达式

#include<iostream>using namespace std;int times=0;int n;void cal(int ord,int ele,int res){ if(ord==n+1){ if(res==0&&ele<11)times++; return; } cal(ord+1,ord+1,res+ele); if(ele!=1&&ele!=12...

2021-12-17 11:49:45 411

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除