- 博客(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
150
原创 记录下原子操作的同步以及内存顺序
先解释几个点: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
322
原创 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
225
原创 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
82
原创 今天我再来讲一下js的变量名引用吧。顺便补充一下上次的闭包。
闭包:一个作用域内的function或object对象被引用,导致该作用域的其他变量也持续存在,而不是随着作用域的结束而销毁。简洁明了。————————————迁入正题:js中,你用到的所有变量名,都在栈区。而复杂对象的内存都在堆区。但你无法直接修改堆区的复杂对象,只能通过【栈区引用.堆区属性】来修改堆区的内存。这里借用一下c的概念:比如有个list,这时候你手上只有一个list*lp=链表头,如果你想要改链表的结构,那就只能通过lp->next=xxxx来修改。即 栈区指
2022-04-03 10:59:18
1767
原创 今天讲一下我对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
1256
原创 洛谷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
86
原创 对快速排序时间复杂度的证明
取一个随机数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
1132
原创 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
3778
原创 洛谷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
302
原创 洛谷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
180
原创 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
462
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人