Skip to content

败犬日报 2024-10-15

1. 有没有精度较高的实现监听文件是否被修改的实现

inotify 或 ebpf。

2. std::unordered_map 可以单线程写多线程读吗

读和写同时发生就崩了。

有多线程需求的话建议 boost::concurrent_flat_map,或者 absl / folly 之类的库里摸一个出来。

或者 clickhouse::PartitionedHashTable。

或者 tbb。

3. malloc 怎么保证线程安全

考虑 glibc 的 malloc,主要是使用互斥锁(mutex)。

内存分配区域(arena)是系统内部分配的大块内存(使用 brk 或 mmap 系统调用),由一个互斥锁管理;在检测到互斥锁竞争时会创建额外的内存分配区域。

这样可以减少了互斥锁的竞争,可以提高性能。

4. python lambda 捕获

py
a = 1
f = lambda: a
a = 2
print(f())

结果是 2。lambda 在调用时才会查看 a 的值。

另一种解释是,lambda 不直接捕获 a,捕获的是 locals()(即 local 变量组成的字典)。