宏定义踩坑实战:嵌套调用宏定义 C/C++

宏定义踩坑实战:嵌套调用宏定义

问题背景:在刷题的过程中,要使用 min 函数,但是线上 OJ 并没有这个函数。因为一时也想不起它到底属于哪个头文件,所以为了偷懒,顺手就写下了以下宏定义: [crayon-685957028fd618982...
阅读全文
如何在c语言中动态分配二维数组 C/C++

如何在 c 语言中动态分配二维数组

刷 OJ 的时候惊喜的发现,我竟然不会给二维数组动态分配内存。写了 n 年的代码了,竟然被这个难倒了!没想到好多年没搞算法,不仅脑袋不灵光了,连基础都丢了。真是自惭形秽! 方法一 先分配指针数组的内存,然后给...
阅读全文
linux c获取系统CPU核数 编程语言

linux c 获取系统 CPU 核数

做代码优化,发现代码中获取系统 CPU 核数是通过 system 调用命令得到的,想想最近被 system 支配的恐惧,果断改掉。 linux c 中获取 CPU 核数的函数原语有两个: [crayon-6859570...
阅读全文
C++中的异常处理 C/C++

C++中的异常处理

一、异常处理 1.1 异常的基本用法 C 语言中因为没有异常处理 (只能通过返回值来判断错误) 机制一直被诟病,因此 C++也引入了 try...catch 机制,使得 C++也能像 java/python 一样来捕获...
阅读全文
I/O模型 编程语言

I/O 模型

一、 I/O 模型分类 unix 环境下有 5 中 IO 模型: 阻塞式 I/O 非阻塞式 I/O I/O 多路复用 信号驱动 I/O 异步 I/O(POSIX 中的 aio_系列函数) 常用的是前三种方式,特别是多路 I/O 复用...
阅读全文
猴子拿苹果问题-匿名信号量 C/C++

猴子拿苹果问题-匿名信号量

一、猴子拿苹果问题 逛脉脉时,看到一网友遇到的面试题:有 9 个苹果,2 只猴子。一个猴子每次拿 2 个苹果,一个猴子每次拿 3 个苹果。如果剩余的苹果数量不够猴子拿的数量,则停止拿苹果。请用多线程的方式模拟上面的...
阅读全文
进程间通信之共享内存 C/C++

进程间通信之共享内存

共享内存是所有 IPC 通信中效率最高的,它通过把文件映射到用户进程空间,然后直接通过地址访问来实现多进程通信。相对于其他 IPC 通信方式而言,少去了把数据从用户空间复制到内核空间,再从内核空间复制到用户空...
阅读全文
进程间通信之信号量 编程语言

进程间通信之信号量

一、信号量 信号量有两种,一种的有名信号,一种是无名信号。有名信号一般用于进程间同步,无名信号一般用于于线程间同步。创建或打开一个信号的函数: [crayon-6859570290d807177844...
阅读全文
EAGAIN和EWOULDBLOCK的处理办法 C/C++

EAGAIN 和 EWOULDBLOCK 的处理办法

EAGAIN 和 EWOULDBLOCK 是 linux 环境下的两个错误码,在非阻塞 IO 中经常会碰到,对新手而言,如何处理这两个值非常头疼。如果处理不当,很容易导致程序异常。 EAGAIN 的官方定义: 「Re...
阅读全文