|
发表于 2004-11-8 20:09:17
|
显示全部楼层
最初由 realtang 发表
信号灯和自旋锁都是内核用来同步内核的数据结构的。
而且自旋锁用在单处理器上会永远的死循环下去,等待使用某个被锁定的数据的进程永远得不到cpu时间。
linux下得pthread库都是效率不高的用户态所实现得posix调用(gcc所实现),除非你改内核增加信号灯的系统调用。
否则,在用户态下实现某个共享内存中某个数据结构的锁定,自己模拟内核写个信号灯机制吧。
自旋锁在新的2.6的内核里在单处理器可以不是死循环的,因为2.6的内核是可以抢占的。
至于PTHREAD库,它的实现很多地方都用到了内核导出的系统调用,而且它也不是GCC实现的,它是GLIBC的扩展部分。还有,用户态也不一定效率不高,很多时候在用户态的开销比在核心态要小,进程/线程调度有个叫upcall的方法就是基于这样的思想的。
我觉得用PTHREAD库的互斥锁没什么不好的,毕竟这是比较成熟的东西,各方面都考虑的周到一些。除非在对性能有很高要求的地方,比如说嵌入式系统,可以自己定制,毕竟嵌入式系统的结构要稍简单一些。 |
|