Coding style 编码方式:锁定/解锁内部还是外部?
另一个可能是空洞的问题: 如何锁定并发?执行者或调用者应该负责锁定线程吗 e、 没有特别的语言Coding style 编码方式:锁定/解锁内部还是外部?,coding-style,locking,pthreads,objective-c++,Coding Style,Locking,Pthreads,Objective C++,另一个可能是空洞的问题: 如何锁定并发?执行者或调用者应该负责锁定线程吗 e、 没有特别的语言 Caller::callAnotherThread() { _executor.method(); } Executor::method() { _lock(); doSomething(); _unlock(); } 或 我对线程和锁定知之甚少,所以我想确保代码是健壮的。第二种方法允许线程不安全的调用。。。从技术上讲,您可以调用_executor.method()
Caller::callAnotherThread() {
_executor.method();
}
Executor::method() {
_lock();
doSomething();
_unlock();
}
或
我对线程和锁定知之甚少,所以我想确保代码是健壮的。第二种方法允许线程不安全的调用。。。从技术上讲,您可以调用_executor.method(),而无需执行任何类型的锁定
帮忙
谢谢,锁定应由被叫方执行,而不是由呼叫者执行。被调用方是唯一知道需要同步什么的人,也是唯一能够确保同步的人。如果您将锁定留给来电者,您会做三件坏事:
如果您在内部使用锁,则必须在手册文档中注明。否则,您的代码将成为并行执行的瓶颈,用户将很难知道真相。我们了解到,如果您需要同时执行多个相关的粒度操作,外部锁定将提供优势,或者使用对内部结构的引用—只要您需要一组工作以避免其他线程的攻击,您就可以持有一个锁 例如:管理项目列表的容器可能希望提供一个api来获取对一个项目的可变引用。在没有外部锁定的情况下,一旦函数调用完成,另一个线程可能会锁定和修改数据。一个可行的解决方案是返回一个项目的副本,但这是低效的
也就是说,在某些情况下,内部锁定可以有一个更干净的api,前提是您可以确保不希望将锁定保留超过一个函数调用的时间。锁定/解锁(关键部分处理)非常依赖于编程语言。有些已经内置了对关键部分的支持,有些则没有。你有特别的语言吗?(pthreads向我推荐C/C++)+1。好的观点,但我认为有一些有效的情况,你也可以把门锁在外面。好的,这就是我到目前为止的做法D
Caller::callAnotherThread() {
_executor.lock()
_executor.method();
_executor.unlock()
}
Executor::method() {
doSomething();
}