摘要:锁的实现 互斥锁 锁的开销 机制 摘录自:https://www.cnblogs.com/MrLiuZF/p/15143976.html 现在锁的机制一般使用futex(fast userspace mutexes),即内核态和用户态的混合机制。 在futex之前,内核维护一个对象,这个对象对所有进
阅读全文
摘要:# timed_wait和系统时间 ## 环境的准备 本文中的试验涉及到手动修改系统时间,因此需要临时禁用自动时间同步服务; 对于ubuntu24.04,可以执行 ```bash sudo service systemd-timesyncd stop ``` ## 问题的提出 在linux中,有几种
阅读全文
摘要:# system函数的风险和解决 ## 源码摘录 ```c /* Execute LINE as a shell command, returning its status. */ static int do_system (const char *line) { int status = -1;
阅读全文
摘要:# 线程安全和可重入 ## 线程安全 ### 定义 如果一个函数被多个线程并发执行时,这个函数不会出现异常,则称这个函数是线程安全的。 ### 线程安全的破坏 1. 如果这个函数被多个线程调用时,可能会修改同一个资源,则就可能破坏线程安全。 例如,函数访问全局变量: ```c++ #include
阅读全文
摘要:链接找不到符号的两种表现 本文分析链接时找不到符号时的两个不同表现,帮助快速定位问题。 结论 如果链接时出现找不到符号的问题,需要注意提示信息中的符号是否有函数签名信息。如果有函数签名信息,则是依赖一个C++符号,否则就是依赖一个C符号。 场景还原 库代码: // file: haha.c int
阅读全文
摘要:动态库的重复链接 背景 如果现有系统的库有两个层次,底层库和接口库。接口库通过dlopen的方式加载底层库,接口库提供给用户使用。现在需要在用户层调用底层库的接口,应该如何做? 一个解决方案(有问题的) 一个直观地解决方案就是直接给出底层库需要调用的接口的原型,然后直接调用。由于调用接口需要在编译时
阅读全文
摘要:共享库的版本控制 关于 SONAME 编译动态库时,可以指定 SONAME 字段,SONAME 字段相当于时动态库的链接的名字。生成目标程序的链接步骤中,如果发现动态库中存在 SONAME 字段,则最终生成的目标程序依赖的动态库名字会使用 SONAME 中的名字。也即最终程序运行时,加载器寻找的动态
阅读全文
摘要:嵌入式音频卡顿问题分析过程 问题还原 设备存在一路音频播放数据为从网络传入,在项目进行过程中,观察到音频播放存在不流畅的问题。 分析流程 为直接分析是否是修改引起,将项目进行了回滚。通过大量的回滚和测试,最终确定是编译选项增加了 -O3 引起。初步的解决方案就是在最新版本上去掉了 O3 选项,去掉之
阅读全文
摘要:vscode 配置记录 vscode 启用 clangd 相比推荐的 C/C++ 插件,clangd 在功能可用性上有质的提升。 首先在 ubuntu 上安装 clangd # first install clangd apt-get install clangd-11 # set clangd11
阅读全文
摘要:启动脚本 ubuntu 20.04 默认没有创建 /etc/rc.local 文件,只需要手动创建,并给执行权限即可。
阅读全文
摘要:程序的链接 提出问题 程序在编译过程中,有时候会碰到符号冲突无法编译通过的问题,有时候会碰到符号冲突最终只选择了一个的问题,因此本文从链接的角度讨论一下这两个现象的背后原因。 实例 符号冲突无法链接报错的例子 add.c int add(int a, int b) { return a+b; } a
阅读全文
摘要:记一次因为库符号冲突引起的程序崩溃问题 环境 使用了来自第三方的库,在使用提供的头文件编译内部协议库之后,出现了崩溃问题。 解决 尝试调整库的连接顺序 连接的过程是向后查找,也即对于没有找到的符号再向后续连接的库查找。因此如果两个库有同一个符号,则最终使用的符号对应代码可能就不一致(多个库存在相同的
阅读全文
摘要:vim常用操作 本文主要用来记录 vim 中常用的操作,方便查找(尽管 vim 的帮助文档已经十分强大)。 浏览 跳转 CTRL-I 跳转到新的光标位置 CTRL-O 跳转到旧的光标位置 CTRL-] 跟去tag CTRL-T 返回tag 状态 CTRL-G 显示当前信息 多文件 😒plit :v
阅读全文
摘要:ubuntu16.04国内源 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
阅读全文
摘要:Shell脚本示例 目录Shell脚本示例输入与输出字符串测试文件测试流程控制printf内置变量变量数组分隔符调整生成时间获取配置文件中的 = 后的名字按列求和md5sum 过滤掉路径生成 compile_commands.json截取文件中的指定行find 查找目录,并过滤掉 svn 相关目录找
阅读全文
摘要:samba禁止创建指定文件 veto files = /.DS_Store/._*/
阅读全文
摘要:嵌入式开发的一些配置 samba服务 在windows下查看linux下的文件,从而实现在windows下编辑,在linux下编译的开发方式。 sudo apt-get install samba 修改/etc/samba/smb.conf配置文件,在文件尾追加: [shared-name] #共享
阅读全文