多线程
Linux中锁的种类(自旋锁 临界区 递归锁 悲观锁 乐观锁等)
- 自旋锁:忙等待锁,适用于锁持有时间短的场景。
- 临界区:保护共享资源的代码块,防止并发访问。
- 递归锁:允许同一线程多次加锁,防止死锁。
- 悲观锁:假设会发生冲突,操作前加锁。
- 乐观锁:假设不会发生冲突,提交时检查冲突。
条件变量 虚假唤醒
- 条件变量:用于线程间同步,等待特定条件满足。
- 虚假唤醒:线程被唤醒但条件未满足,需重新检查条件。
CAS与无锁数据结构(主要是无锁单向链表和ringbuffer)
- CAS:比较并交换,用于实现无锁数据结构。
- 无锁单向链表:使用CAS操作实现,避免锁竞争。
- RingBuffer:环形缓冲区,用于高效数据传输,避免锁竞争。
线程和协程的区别
- 线程:操作系统调度,开销较大,适用于并发任务。
- 协程:用户态调度,开销较小,适用于高并发任务。
双缓冲 (Double Buffering)
使用两个缓冲区交替工作,提高数据处理效率。
- 特点:一个缓冲区用于读操作,另一个缓冲区用于写操作。
- 适用场景:图形渲染、数据流处理。
内存屏障
防止编译器和CPU重排序,保证内存操作顺序。
- 特点:确保内存操作按程序顺序执行。
- 适用场景:多线程编程、并发控制。
可重入与多线程安全的区别
- 可重入:函数可以被中断后安全地再次调用,不依赖全局状态。
- 多线程安全:函数在多线程环境下安全执行,防止数据竞争。