2010年12月8日 星期三

Critical section

In concurrent programming a critical section is a piece of code that accesses a shared resource (data structure or device) that must not be concurrently accessed by more than one thread of execution.

參考 Log of /trunk/src/base/lock.h

lock (= critical section) 主要架構如下,注意 LockImpl 的技法 (opaque pointer),很多 OS dependency 的 utility class 可以採用這樣的技法,事實上,Qt framework 狂用這招。

class Lock {
public:
Lock() : lock_() {}
~Lock() {}
void Acquire() { lock_.Lock(); }
void Release() { lock_.Unlock(); }

bool Try() { return lock_.Try(); }
private:
LockImpl lock_; // Platform specific underlying lock implementation.
};

在 Win 平台上,
::InitializeCriticalSectionAndSpinCount()
API 是最大的亮點,可以參考裡面寫的 comments. Standard posix 十分正常,看過就好。

沒有留言:

張貼留言