编码风格:锁定/解锁内部还是外部?

Ste*_*ani 3 coding-style locking pthreads objective-c++

另一个可能是愚蠢的风格问题:

并发应该如何锁定?执行者或调用者应该负责锁定线程吗?

例如没有特定的语言......

Caller::callAnotherThread() {
    _executor.method();
}

Executor::method() {
    _lock();
    doSomething();
    _unlock();
}
Run Code Online (Sandbox Code Playgroud)

或者

Caller::callAnotherThread() {
    _executor.lock()
    _executor.method();
    _executor.unlock()
}

Executor::method() {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

我对线程和锁定知之甚少,所以我想确保代码是健壮的。第二种方法允许线程不安全调用...从技术上讲,您可以在不执行任何锁定的情况下调用 _executor.method()。

帮助?

谢谢,

Pet*_*man 5

被调用者而不是调用者应该进行锁定。被调用者是唯一知道需要同步什么并且唯一可以确保同步的人。如果你把锁定留给调用者,你会做三件坏事:

  1. 你增加了函数/类用户的负担,增加了设计粘性。
  2. 您可以让调用者在不获取锁的情况下更新共享状态。
  3. 如果不同的函数以不同的顺序获取多个锁,则会引入死锁的可能性。