• 为什么条件变量需要与互斥锁配合使用

    条件变量(condition variable)是常用的线程同步技术,通常用于让线程阻塞并等待某个条件满足。它需要与互斥锁搭配使用,但是你有想过为什么需要搭配一个互斥锁呢?

  • 单个进程内最多可以有多少个线程

    在开发一个服务程序时,使用的是单个进程中多线程的模式,要为每个连接的设备分配一个线程。随着设备越来越多,分配的线程数量就不断上升,当线程数量达到一定值时程序就报错退出了。于是问题就来了,单个进程到底可以有多少个线程呢?

  • Linux 常用的排查故障指令

    本文总结了常用的排查 linux 服务器故障的命令行指令,这些指令能够查看操作系统的实时状态信息,在排查问题时起到辅助作用。

  • Linux中修改程序的run path

    对于动态库的加载,不同的操作系统有不同的搜索策略。在windows下,程序会优先加载同路径中的动态库,这是一个非常方便的特性。而在linux下,需要单独配置 LD_LIBRARY_PATH 以实现上述类似特性。曾经困扰我很长一段时间的就是linux平台的动态库加载问题,最常出现的问题是程序启动时找不到所需要的动态库。在得知修改run path可以调整程序搜索动态库的路径时,一切都迎刃而解了。

  • C语言中数组地址的特性

    最近在开发中使用到了C风格的数组,在对数组地址进行增减操作时有些疑惑,现在将这些要点总结下来,方便查阅。

  • 在Linux的信号处理函数中不要进行锁相关操作

    最近在写一个linux程序,其中一个逻辑是要等待信号(signal),我使用了条件变量(condition variable)来完成这个操作,但是实际效果却是整个程序卡住了,经过查阅资料后得知在信号处理函数中是不能进行锁操作的。

  • MSVC工程里Unicode字符集和多字节字符集选项

    在Visual Studio的C++工程中,有个一选项可以设置当前工程的字符集,本文主要围绕着该设置置项展开。

  • 在gdb中以16进制的方式打印变量

    在gdb调试过程中可以通过 print(p) 查看指定变量的内容。在默认情况下,数字是以10进制的形式显示的,但有时候我们想以16进制的形式查看该变量。

  • 排查Windows平台动态库和静态库链接失败问题

    最近帮同事查了一个C++链接过程的问题,这个问题比较隐蔽,也非常有代表性,记录下来方便后面查阅。

  • C++中delete关键字常见错误

    C++中的delete关键字用于释放动态申请的内存,是使用频率非常高的关键字,本文将开发中常出现的错误加以总结,方便以后查阅。

  • 位域与联合体的内存布局

    位域(bit field)与联合体(union)都可以用来控制内存布局。本文主要阐述的内存可总结为:位域的内存布局是编译器决定的,而联合体的内存布局是由大小端决定的。

  • redis中的数据结构

    本文主要介绍了 redis 中的底层数据结构类型,并比较了操作这些数据时的时间复杂度。