Microsoft Foundation Classライブラリ専用スレです。
■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx
MFC相談室 mfc23d.dll [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2016/09/21(水) 00:20:48.44ID:OfO+mYkd110デフォルトの名無しさん
2017/05/31(水) 00:18:49.47ID:VxTDzTEq Mutexみたいに名前付きなら上のスタンドアロン方式も理解できるけど名前ないからなー
わかんね
わかんね
111デフォルトの名無しさん
2017/05/31(水) 10:12:23.47ID:7kWP6r82 CCriticalSectionインスタンスが同期オブジェクトなわけではないよ。
クリティカルセクションは名前の通りクリティカルな区間のこと。Win32APIのEnterCriticalSection()からLeaveCriticalSection()の区間。
CCriticalSectionはこれのラッパー。
クリティカルセクションに入るスレッドはプロセスで一つだけになる。
プロセス間排他はできない代わりに軽い。
同期オブジェクトがプロセスで一つだけになのと同義。
マルチコア・マルチスレッドでロック待ちが無視できなくなるようなら他の使う。
クリティカルセクションは名前の通りクリティカルな区間のこと。Win32APIのEnterCriticalSection()からLeaveCriticalSection()の区間。
CCriticalSectionはこれのラッパー。
クリティカルセクションに入るスレッドはプロセスで一つだけになる。
プロセス間排他はできない代わりに軽い。
同期オブジェクトがプロセスで一つだけになのと同義。
マルチコア・マルチスレッドでロック待ちが無視できなくなるようなら他の使う。
112デフォルトの名無しさん
2017/05/31(水) 13:08:02.66ID:ZVZYbrmW >>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クラスを使えと。
クリティカルセクションという用語は>>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クラスを使えと。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず★2 [七波羅探題★]
- 【芸能】デパートで見つけたランドセルが衝撃価格! つまみ枝豆「どこかで規制しないと」に共感の声殺到 「全て同感」「高すぎますね」 [冬月記者★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化 過去10年間に使用のメールアドレスや電話番号等も [Hitzeschleier★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★3 [Hitzeschleier★]
- 【速報】年収の壁の自民案判明、26年は168万円 [蚤の市★]
- お昼のまったり🍵😶‍🌫🤏すこすこハウス🏡
- 「ミニトマトがボウルに入ってるから使ったら残りはラップして輪ゴムしといてー」👉アスペ系旦那、とんでもない行動に出てしまう [242521385]
- 「4070ti」←tiってなんだよwww
- ネトウヨ「中国ロシアとの戦争?日本にはアメリカがついてるので100%勝ちますよ」 [165981677]
- 【悲報】高市政権、中国軍機のレーダー照射について国際社会に発信へ [115996789]
- 自閉症児の父親「中絶しておけば良かった。 家族が欲しかったのに、手に入れたのは人間たまごっち」 [777114754]
