linux大量使用了static关键字用来修饰函数和结构体定义,为何?
#linux#语言#多线程#struct#c#2010
这样做的目的与前述函数、变量相同——限制作用域,防止其他文件误用或误改。
4. 多线程环境下的 static 数据
2.和LS的两位意思差不多,static可以减少函数的使用,也就起到了便于维护的作用(不用同时修改多处地方的代码)。但是这同样破坏了类的结构性,老板也一直不让我使用static的接口。
一直觉得C++是注重结构性的语言,虽然性能很重要,但是C++更注重接口的使用,以良好的设计带来良好的性能与易拓展性。这和C语言有些不同吧~
4.1 线程共享 vs. 线程私有
- 共享数据:如果某个
static变量需要在多个线程之间共享(例如计数器、状态标志),必须自行 加锁(spinlock、mutex)或使用 原子操作 来保证并发安全。内核中常见的做法是将该变量放在struct中,并通过spin_lock()系列函数保护访问。 - 线程私有数据:如果变量仅在单个线程内部使用,通常不需要
static,而是放在 线程栈 或 线程局部存储(TLS) 中。Linux 内核提供current指针指向当前进程/线程的task_struct,可以在其中挂载私有数据,避免全局static带来的竞争。
4.2 static 与锁的配合
在内核代码里,static 变量常常配合锁一起出现,形成“内部状态 + 保护”模式。例如: