>>111
クリティカルセクションという用語は>>111の言う様に元々「クリティカルな区間」のことだが、Win32では
スレッド間排他処理のための同期オブジェクトとして"CRITICAL_SECTION"があり、CCriticalSectionはこのラッパー。
( https://msdn.microsoft.com/ja-jp/library/cc429052.aspx にも"「クリティカル セクション」は、Win32の基本的な同期オブジェクトの1つです。"と書かれている)

>>109
確かにその説明はチンプンカンプンだねえ。
推測だけど、たとえばCStringをスレッド間排他制御するために

CString strFoo ;
CCriticalSection csForFoo ; // 非AUTO
 :
csForFoo.Lock() ;
strFoo += strBar ;
csForFoo.Unlock() ;
 :
みたいに書く(定義上はcsForFooはstrFooと結びついていない)のが、「スタンドアロン方式」で

class CThreadSafeString : public CString {
private:
 CCriticalSection csForMe ;
public:
 void ThreadSafeAppend( LPCSTR p ) {
  csForMe.Lock() ;
  *this += p ;
  csForMe.Unlock() ;
 }
} ;
みたいに書く(クラスに排他処理を埋め込む)のが「埋め込み方式」じゃないかなあ。

で、いずれの方式でも上記のような記述では「クリティカルな区間」で例外が発生するとUnlock()が実行されないので、これを避けるため、CSingleLockクラスを使えと。