另一个可能愚蠢的问题:
并发应该如何锁定?执行者或调用者应该负责锁定线程吗?
例如没有特定的语言...
Caller::callAnotherThread() {
_executor.method();
}
Executor::method() {
_lock();
doSomething();
_unlock();
}
OR
Caller::callAnotherThread() {
_executor.lock()
_executor.method();
_executor.unlock()
}
Executor::method() {
doSomething();
}
我对线程和锁定知之甚少,所以我想确保代码是健壮的。第二种方法允许线程不安全调用...从技术上讲,您可以调用 _executor.method() 而不执行任何类型的锁定。
Help?
Thanks,
被调用者而不是调用者应该执行锁定。被调用者是唯一知道什么需要同步并且唯一能够确保同步的人。如果你将锁定留给调用者,你会做三件坏事:
- 您增加了功能/类用户的负担,增加了设计粘度。
- 您使调用者可以在不获取锁定的情况下更新共享状态。
- 如果不同的函数以不同的顺序获取多个锁,则可能会出现死锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)