05 2023 档案
摘要:# 一些新知识点 ## `__builtin_expect`: > https://blog.csdn.net/sinat_31608641/article/details/120692775 Linux 内核、Glib等会经常看到 likely()、unlikely() 两个宏,它们都使用了GCC
阅读全文
摘要:# 死锁 # 条件变量和互斥量区别 互斥器是加锁原语,用来拍他性地访问共享数据,它不是等待原语。在使用 mutex 时,我们一般都会期望加锁不要阻塞,总是能立刻拿到锁,然后尽快访问数据,用完之后尽快解锁,这样才能不影响并发性和性能。 如果需要等待某个条件成立,我们应该使用条件变量。条件变量顾名思义是
阅读全文
摘要:# 多线程服务器常用的编程模型及适用场合 ## 线程与进程 * 先区分下线程和进程的概念,一个进程是内存中正在运行的程序,每个进程都有自己独立的地址空间,Linux操作系统通过 `fork()` 系统调用产生进程。 * 线程的特点是共享地址空间,从而可以高效地共享数据。一台机器上的多个进程能够高效地
阅读全文
摘要:# 多线程安全 现在 glibc 库函数大部分是线程安全的,特别是 `FILE*` 系列函数是安全的,但是两个或者多个函数组合到一起就不是安全的了。例如 `fseek()`、`fread()` 两个函数都是线程安全的,但是对某个文件先 `seek()` 再 `read()` ,这两步操作中间有可能会
阅读全文