Windows 下的多线程应用
Windows 下的多线程中线程锁是通过CRITICAL_SECTION实现,用以保护用户数据,即当串行代码断执行到该部分时,操作系统将告知下一来执行到此处的线程等待,直到上一个线程离开被保护的代码断,从而通过将需要访问数据的部分放在该代码段来保护数据被多线程访问时的一致性。
Windows 下的多线程中线程锁是通过CRITICAL_SECTION实现,用以保护用户数据,即当串行代码断执行到该部分时,操作系统将告知下一来执行到此处的线程等待,直到上一个线程离开被保护的代码断,从而通过将需要访问数据的部分放在该代码段来保护数据被多线程访问时的一致性。
当程序运行出现如下错误时:
1 | Program terminated with signal 11, Segmentation fault (core dumped). |
系统会提示有coredump产生,但通常我们在系统文件夹下并找不到core文件,是因为系统设置产生core文件大小为0,也即不会产生,所以我们这里可以做一些简单的设置:
设置core文件产生在当前目录,%e表示产生core文件的程序名,%p为pid号:
1 | echo "core.%e.%p" > /proc/sys/kernel/core_pattern |
查看当前core文件设置的大小:
1 | ulimit -c |
设置core文件大小为无限制:
1 | ulimit -c unlimited |
关于动态链接库和静态链接库的区别可以参考另一篇笔记,其实也就一句话:静态链接库在编译期加载到相应的编译目标中(编译后不再需要),而动态链接库是在运行期由执行目标进行调用(每次运行都需要)。
Windows下动态链接库以后缀.dll标识,Linux下的动态链接库命名为libxxx.so,其中xxx为库名称。
GTest是Google官方团队开发的开源的C++单元测试框架,地址为:https://github.com/google/googletest。该地址下同时有一个名为googlemock的项目,Google Mock可以理解为Google Test的辅助测试框架,Google Mock可以用于实现一个模拟类(mock类),可以用于完成需要接口交互但相应的类又没有实现的测试。本文不涉及Mock,以后有空了再追加Google Mock的使用。
使用Google Test可以实现:
1、测试应该是独立并且可以重复的。
2、测试应该组织良好,能够清晰的反应出测试代码的结构。
3、测试应该是可移植和可利用的。
4、当测试失败时,Google Test将会提供尽可能多的测试信息,并继续后面的测试而不是结束测试。
5、Google Test会跟踪所有用户定义的新测试,而不需要用户一一再去调用它们。从而将测试人员从繁杂的测试用例调用中解放出来,将更多的精力关注中测试本身上。
6、测试实现起来很快,因为Google Test框架能够在测试用例之间共用资源,并且它们之前还不会相互依赖。
tmux主要的功能有两点:
关于Makefile的编写和make命令的简单应用,快速了解Makefile的编写规则,更多功能将在以后的使用中慢慢增加。
需要将用户添加到docker的用户组中,docker在安装完成之后会创建一个名为docker的用户组:
1 | $ sudo usermod -aG docker your_username |
记得重新登录后生效
由于众所周知的原因,需要使用相应的国内镜像,不同的docker版本修改镜像地址的方法不一样,参考
Docker版本在1.12或更高:
创建或修改/etc/docker/daemon.json:
1 | ``` |
DOCKER_OPTS=”–registry-mirror=http://your_addr.m.daocloud.io“
1 | 如果之前DOCKER_OPTS中就有配置命令了,直接将上面的配置命令跟在后面即可。 |
sudo service docker restart
或者使用**阿里云提供的docker镜像也很好用**
### docker国内可用的加速镜像
* 官方国内镜像站 : `https://registry.docker-cn.com`
* 网易docker镜像站: `http://hub-mirror.c.163.com`
* ustc的docker镜像: `https://docker.mirrors.ustc.edu.cn`
* daocloud镜像 : `http://{your_id}.m.daocloud.io`
* aliyun的镜像 : `https://{your_id}.mirror.aliyuncs.com` **重点推荐**
公司里面通常都会为了信息安全而要求个人电脑通过公司的根证书访问SSL加密的链接,如果系统里面没有根证书不管是浏览器还是需要访问SSL加密网络的系统命令都会出现证书相关错误。虽然这些证书错误都可以通过其他一些设置绕过去,但还是直接设置一下系统根证书更方便,一劳永逸(自己公司,忽略安全性)。
git的submodule可以用于在项目中添加子项目,这样就可以让主项目可以引用子项目的同时,子项目又可以进行独立的版本控制管理。当子项目有了更新之后,可以便捷的在主项目中对相应子项目进行更新。
Shell脚本简单入门,如果你分不清shell是什么,此文一定不适合你。毕竟只花了十多分钟看的教程,不会涉及细节,细节将在以后的使用中逐渐以示例形式给出。