有"死锁"/"活锁"的问题。关键是,不能进行组合。
加锁顺序有许多方法保证,但是,两个线程安全的接口放一块儿,就不能保证线程安全了,就有点麻烦了:接口外还需要加锁来保证线程安全……
"无锁":太晦涩,太挑战智力了。虽然最基本的东西 CAS 看起来很简单。
估计只适合老毛子的数学博士了。不过看着老毛子搞出来的 STL 慢慢步入实用,并被 BOOST 超越。也许,lock-free
也会按类似的方式慢慢进入实用?
我的理解是:
"无锁"其实也是加锁了的,不过是隐式的,进而也就可以进行"组合"。
不管"加锁"还是"无锁",到了关键的地方,实际都是串行。
这种复杂应该是固有的。不过有可能弄点语法糖,变得容易一些。
就像微积分,不是一个简单的东西,但是现在都用莱布尼兹的符号表达方式。现在没有人牛顿的那种表达方式了吧?
No comments:
Post a Comment