linux下进程的同步互斥
互斥锁同步互斥为了保护共享资源,使我们线程可以单独使用某个共享资源,使用之前先上锁,当其他进程要使用的时候,就需要等待到这个线程用完之后,再开锁。
声明互斥锁:pthread_mutex_t m;
初始化互斥锁:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);第一个参数:就是前面声明的锁,因为这个参数需要传递的是一个锁的指针,所以需要有一个取地址符。第二个参数:是这个锁的属性,我们让它是默认的属性,这里设置为NULL,返回值:成功返回0, 失败返回-1。
上锁:锁住某个资源int pthread_mutex_lock(pthread_mutex_t *mutex); 这个函数是阻塞型。int pthread_mutex_trylock(pthread_mutex_t *mutex); 这个是非阻塞型的。返回值:成功返回0,失败返回-1.
解锁:int pthread_mutex_unlock(pthread_mutex_t *m ...
进程创建问题
fork函数的应用与理解一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
一个例子:
12345678910111213141516171819202122232425#include <unistd.h>#include <stdio.h> int main (){ pid_t fpid; //fpid表示fork函数返回的值 int count = 0; fpid = fork(); if (fpid < 0) printf("error in fork!\n"); else if (fpid == 0) { pr ...
并查集-高级数据结构
并查集总概
合并两个集合
查询某个节点的祖宗的节点
记录每个集合的大小:(绑定到根节点)
每个节点到根节点的距离:(绑定到每个节点上)
1250. 格子游戏题目链接:1250. 格子游戏
题解思路:根据题目,将各个元素映射到一维数组中,连接起来,检查连接的过程中是否出现环(若出现环状-》出现连接的时候两个节点在同一个连通块中)就说明有圈了
题目代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <bits/stdc++.h>using namespace std;const int N = 41000;int p[N];int n, m;int get(int x, int y){ return x * n + y; //如果是第二种初始化的话可以按照数据来乘倍率 /* return x * 200 + y; */}int find(int x){ i ...
图论
最小生成树Kruskal算法:(稀疏图)
按照边权排序,用并查集维护
未连接的:连上
已经连接的:忽略
时间复杂度是O(mlogn)
Prim算法:(稠密图 O(n^2))
邻阶矩阵存储, d[i]表示i这个未选节点到已选集合的距离
每次找到最小距离(未选点到已选集合)
走廊泼水节题目链接走廊泼水节
描述:给一个树,求一个完全图所加边的权值之和最小值,并且这个图的最小生成树任然是这个树。
题解思路就是在求最小生成树的时候,用Kruskal算法, 当两个集合需要合并的时候,这两个集合连线是最小的,两个集合其他点连线的权值就是这个两个集合连线最小值+1
题目代码12345678910111213141516171819202122232425262728293031323334353637383940#include <bits/stdc++.h>using namespace std;const int N = 6010;struct edge { int x, y, z; } a[N];int fa[N], Size[N];int n;boo ...
高级数据结构
并查集总概
合并两个集合
查询某个节点的祖宗的节点
记录每个集合的大小:(绑定到根节点)
每个节点到根节点的距离:(绑定到每个节点上)
1250. 格子游戏题目链接:1250. 格子游戏
题解思路:根据题目,将各个元素映射到一维数组中,连接起来,检查连接的过程中是否出现环(若出现环状-》出现连接的时候两个节点在同一个连通块中)就说明有圈了
题目代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <bits/stdc++.h>using namespace std;const int N = 41000;int p[N];int n, m;int get(int x, int y){ return x * n + y; //如果是第二种初始化的话可以按照数据来乘倍率 /* return x * 200 + y; */}int find(int x){ i ...
力扣-系列算法题
LeetCode 1601. 最多可达成的换楼请求数目题目链接1601. 最多可达成的换楼请求数目
题解思路状态压缩,根据数据范围可以得出,假设请求长度为m,就是有m个请求,那么就有 1 << m种情况
直接遍历每种情况,求出最大符合条件的情况
代码python31234567891011121314151617181920212223242526272829class Solution: def maximumRequests(self, n: int, requests: List[List[int]]) -> int: m = len(requests) res = 0 def GetCnt(x): s = 0 while x: if x & 1: s += 1 x = x >> 1 return s def check ...
牛客寒假集训4J题(分解质因数+埃氏筛)
题目:https://ac.nowcoder.com/acm/contest/23479/J
求[l,r]区间内所有合数的最小公倍数%(1e9+7)
用埃氏筛筛掉所有质数,剩下为合数
求最小公倍数有3种方法
直接求最小公倍数
用$A*B/gcd(A,B)$就是两数之积 / 最大公因数
分解质因数:$A = 48=22223$ $B=210=2357$,然后两者共有的质因数C:(2,3),两者不共有的A:(2,2,2),B:(5,7)三者相乘 $232225*7 = 1680$
3.每一个合数的质因子都用unordered_map来维护,看这个质因子是否多于之前质因子的个数,将所有维护好的质因子相乘就是最小公倍数
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959 ...
计算机网络-自顶向下
第一章 计算机网络和因特网什么是因特网因特网的描述:
描述因特网具体构成:构成因特网的硬件和软件。
分布式应用提供服务的网络基础设施。
构成描述因特网是一个世界范围的计算机网络,即它是互联了遍及全世界的数以亿计的计算设备的网络。
连入因特网中的格式各样的设备。(网络边缘)
主机(host)或端系统(end system)
通信链路(communication link)。(接入网)
媒介:同轴电缆、铜线、光纤、无线电频谱
传输速率:带宽 bps
分组交换机(packet switch)两种类型。(网络核心)
路由器(router)和 链路层交换机(link-layer switch)
ISP: internet sercice provider ISP 因特网服务提供商。端系统通过ISP接入因特网。
协议(protocol):协议控制因特网中信息的接收和发送。一个协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送/或接收的一条报文或其他事件所采用的动作。
TCP(Transmission Control protocol 传输控制协议)
I ...
kuangbin 系列算法题
AcWing 4224. 起火迷宫题目链接4224. 起火迷宫 - AcWing题库
题解思路BFS:
每次火先向四周蔓延
J检查周围是否可以行走,火走过的地方就不可以继续行走了
相当于是将两个队列并行遍历检查
BFS123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include <bits/stdc++.h>#define pii pair<int, int>using namespace std;const int N = 1010;int n, m;char g[N][N];int st[N][N];int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, -1, 1};void f(){ cin >> n >> m; memset(st ...
博客创建笔记
需要有git node hexo npm全局安装cnpm
npm install -g cnpm —registry=https://registry.npm.taobao.org
cnpm 全局安装hexo 博客框架
cnpm install -g hexo-cli
创建blog
mkdir blog
进入blog初始化一个hexo blog
hexo init
创建文章
hexo n “我的笔记”
安装一个插件建立hexo仓库
cnpm install —save hexo-deployer-git
设置配置文件
1234deploy: type: git repo: https://github.com/jpc901/jpc901.github.io.git branch: master
主题安装github上搜butterfly主题直接安装



