- 1 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:19:27 ]
- マルチスレッドプログラミングについて語るスレ
■前スレ マルチスレッドプログラミング相談室 その7 pc12.2ch.net/test/read.cgi/tech/1215253576/ ■過去スレ その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/ その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/ その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/ その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他特記する事項】
- 190 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 22:25:48 ]
- 殺したり、止めたり。
- 191 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:43:06 ]
- 他スレッドの変数の中身知ることってできないかな?
- 192 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:55:11 ]
- メモリ空間は共有しているので、アドレスがわかれば普通に参照できる。
- 193 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 12:32:06 ]
- win32のインターロックをクリティカルセクションと
同じように使ったら早くて驚いた。 両者の内部的な違い・利点・欠点てなんですかね?
- 194 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 14:06:45 ]
- そもそも用途が違うんじゃない?
インターロックは変数1個ぶんの更新しかできないでしょ? インターロックを使ってクリティカルセクションと同様のものを作ることはできるだろうし、 クリティカルセクションを使ってインターロックと同様のものを作ることもできるだろうけど、 そういう話?
- 195 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 14:31:15 ]
- インターロック一発で出来ることならインターロックで。
- 196 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 14:54:32 ]
- win32のクリティカルセクションは衝突しなければインターロックと同じくらい早いんだなこれが
- 197 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 16:01:33 ]
- いや倍くらいは遅いだろう。
- 198 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 16:15:02 ]
- んだ。インターロックで済むならそれが数倍早い。
- 199 名前:193 mailto:sage [2009/11/05(木) 19:29:23 ]
- 今以下のクラスでクリティカルセクションと同じように扱ってテストしてるんだ。
class InterLock { private: LONG m_Flag; public: void Enter() { while(InterlockedCompareExchange(&m_Flag,1,0)) Sleep(0); } void Leave() { InterlockedCompareExchange(&m_Flag,0,1); } public: InterLock() { m_Flag = 0; } virtual ~InterLock() { } };
- 200 名前:193 mailto:sage [2009/11/05(木) 19:30:08 ]
- こっちはクリティカルセクション晩
class CriticalSection { private: CRITICAL_SECTION cs; public: void Enter() { EnterCriticalSection(&cs); } void Leave() { LeaveCriticalSection(&cs); } public: CriticalSection() { InitializeCriticalSection(&cs); } virtual ~CriticalSection() { DeleteCriticalSection(&cs); } };
- 201 名前:193 mailto:sage [2009/11/05(木) 19:43:57 ]
- //グローバル変数
ロッククラス g_Lock; int g_i = 0; // 三つのスレッドで以下を走らせる void Run() { for(int i=0; i<10000000; i++) { g_Lock.Enter(); g_i++; g_Lock.Leave(); } } int main() { //3つのスレッドでRun()を走らせ、スレッド終了まで待機 (...省略) cout << g_i << endl; cout << time.result() << endl; return 0; } 結果 クリティカルセクション 35秒 g_i = 30000000 インターロック 5.5秒 g_i = 30000000 ロッククラス無し 0.16秒 g_i = 21203536(整合性無し) 環境 OS:win xp CPU:core2duo1.8G メモリ:3G
- 202 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 20:42:07 ]
- ソースまともに見てないけど、CSがもしインライン化されないなら性能的には勝てない
だろうしなぁ まぁ、asm読めば全て分かるだろうけど
- 203 名前: ◆0uxK91AxII mailto:sage [2009/11/05(木) 23:23:50 ]
- TryEnterCriticalSection ~ Sleepだとどうなるの、っと。
threadをCPUと1:1にbindしたらどうなるの、っと。 timesliceを変えたらどうなるの、っと。 結果は書かない方が良い。
- 204 名前:193 mailto:sage [2009/11/06(金) 07:01:38 ]
- >TryEnterCriticalSection ~ Sleepだとどうなるの、っと。
これだけやってみた。 上記のテストだとインターロックとの差は0.5秒内、 つまりほとんど差がなくなった
- 205 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 13:00:12 ]
- プロセッサ数が2以上ならSpinWaitにしたらどうなる?
あとインターロックのIncrementでダイレクトアップデートにしたらどうなる?
- 206 名前: ◆0uxK91AxII mailto:sage [2009/11/06(金) 20:26:47 ]
- 違うネタだけど。
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <stdlib.h> #define THREADS 64 #define LOOPS 123456789 struct SData { LARGE_INTEGER m_cntBegin; LARGE_INTEGER m_cntEnd;}; DWORD WINAPI thread(LPVOID pArg); int __cdecl cmpForSort(const void *pArg0, const void *pArg1); int _tmain() { int i; HANDLE ahThread[THREADS]; SData aData[THREADS]; LARGE_INTEGER diff; for (i=0; i<THREADS; i++) ahThread[i] = CreateThread(NULL, 0, thread, &aData[i], 0, NULL); WaitForMultipleObjects(THREADS, ahThread, TRUE, INFINITE); qsort(aData, THREADS, sizeof SData, cmpForSort); for (i=0; i<THREADS; i++) { CloseHandle(ahThread[i]); diff.QuadPart = 0<i? aData[i].m_cntBegin.QuadPart - aData[i-1].m_cntBegin.QuadPart: 0; _tprintf(_T("thread: %d, diffBegin: %I64d, clock: %I64d\n"), i, diff.QuadPart, aData[i].m_cntEnd.QuadPart-aData[i].m_cntBegin.QuadPart); } return 0; }
- 207 名前: ◆0uxK91AxII mailto:sage [2009/11/06(金) 20:28:49 ]
- DWORD WINAPI thread(LPVOID pArg)
{ SData *pData; DWORD value; float sum; pData = (SData *)pArg; QueryPerformanceCounter(&pData->m_cntBegin); __asm { mov ecx, LOOPS fldz LOOP_: fadd QWORD PTR value dec ecx jnz LOOP_ fstp DWORD PTR sum } QueryPerformanceCounter(&pData->m_cntEnd); return 0; } int __cdecl cmpForSort(const void *pArg0, const void *pArg1) { LARGE_INTEGER diff; diff.QuadPart = ((SData *)pArg0)->m_cntBegin.QuadPart - ((SData *)pArg1)->m_cntBegin.QuadPart; if (0 > diff.QuadPart) return -1; if (0 < diff.QuadPart) return 1; return 0; }
- 208 名前: ◆0uxK91AxII mailto:sage [2009/11/06(金) 20:37:44 ]
- 同じ処理なのに所要時間がブレるとか、
先に開始したthreadよりも、後から開始した方が早く処理を終えるとか。 そういうのが起こりうる。 computer gameでmulti threadの利用に消極的な理由の一つだと思う。
- 209 名前:193 mailto:sage [2009/11/06(金) 23:12:33 ]
- >>205
>インターロックのIncrementでダイレクトアップデートにしたらどうなる? 1.3秒だった >SpinWait これC#じゃん
- 210 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 01:40:37 ]
- スピン待機はC#限定じゃなく一般的な概念だ
- 211 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:40:03 ]
- スピンすると余計遅くなりそうだな。
一般的な使用状況に比べて処理と競合がタイトすぎるせいかな多分。
- 212 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:45:49 ]
- ああつまり3スレッド同時じゃなくて1スレッドで3回繰り返した方が速いとかっていう状態ね。
- 213 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 17:33:40 ]
- あーいやいや、これだとちょっと書き方がおかしいな…まあいいや
- 214 名前:193 mailto:sage [2009/11/07(土) 19:49:07 ]
- スピンロックは信頼性がないという話を聞いたような。
さて上記のベンチですが、1スレッドで3回繰り返したほうがずっと早いです。 衝突したときに別の処理をせずに待つ場合はシングルスレッドにした方がいいかも。
- 215 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:02:47 ]
- スピンロックに信頼性が無かったらどうすんだよw
全然仕組みとか分かってなくて使ってる匂いがぷんぷんするな
- 216 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:03:53 ]
- スピンロックとスピンウェイトは基本的に別物です。
- 217 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:12:02 ]
- それと信頼性に何の関係が?
- 218 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 02:55:49 ]
- スピン待ちの話をされてスピンロックどうこうと返すのがおかしい
- 219 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 10:06:21 ]
- 上の人じゃないけど、スピンロックはスピンウエイトを使ってやってるかとおもてたよ(´・ω・`)
- 220 名前: ◆0uxK91AxII mailto:sage [2009/11/08(日) 12:45:22 ]
- spinlockでlockできる保証は無いね。
偶然上手く動いているだけ。
- 221 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:48:53 ]
- ◆0uxK91AxIIで検索したら、NGしてもいいくらいトンチンカンな奴だな
- 222 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 14:27:27 ]
- トリップ付けるような奴だもの。
- 223 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:06:21 ]
- トンチンカンなんて久々に見た
おやつあげないわよ
- 224 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 09:14:41 ]
- 抜作先生の方がまだ新しいな。
- 225 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:01:41 ]
- マルチスレッド対応の基数木のアルゴリズムって
どうやって記述すればいいのでしょうか? CかC++で探しています。
- 226 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:31:16 ]
- 読み込みと書き込みが1スレッドずつの場合でもメモリ破壊って起きるのでしょうか?
たとえば、ある変数をメインスレッドで読み込み続け、 複数のサブスレッドで、クリティカルセクションを用い、書き込むといった場合です
- 227 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:39:31 ]
- >>226
とりあえず破壊読み出しメモリだと死ぬよね。
- 228 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:29:29 ]
- >>226
まずメモリ破壊を定義してもらおうか
- 229 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 01:41:11 ]
- パソコンのネジ外して開けると見えてくるメモリの部分をハンマーで叩く
- 230 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 01:42:27 ]
- ハードウェア的な話題もするんか
- 231 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:21:03 ]
- 宇宙線による確率的なビット反転は防ぎようがない
- 232 名前:226 mailto:sage [2009/12/23(水) 10:10:00 ]
- データが飛ぶという意味でのメモリ破壊です
ハード的にどのように動作しているのか分からないのですが 同アドレスに同時にアクセスされることによってメモリ破壊が起きるのでしょうか?
- 233 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 10:20:05 ]
- 書き込みをクリティカルセクションで同期して、クリティカルセクションを抜けたところで可視性が保証されたとしても、
読む方が書き込み中にその変数を見る可能性があるなら、少なくとも意図しない値を読む可能性はあるんじゃない? (+不変な変数見てると思われるかもね) 要求次第だけど、 この手のポーリングするやつは、次に読めればいいからその瞬間のスナップショットで十分だと思うので、 Atomicな操作用のAPI使うとか、書き込みがAtomicであることが保証されるならvolatileだけでもいいかも。 その変数の読み書きだけ同期とっても、読んでる間の書き込みは防げても、 読み込みが終わってクリティカルセクション抜けたあと、それで処理しようと思ったら もう書き換わってることもあるし。 読んだ値の処理が終わるまで書き込ませないなら、話は別だけど。
- 234 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:15:37 ]
- 昔使ったタイマ LSI でラッチ→lo-read→hi-readって
いう約束ごとのあるやつがあったな。hi-readでラッチ が外れる奴。word-read 命令が使えるかどうかは CPU 次第。
- 235 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 12:47:17 ]
- >>226
ハードや操作による。 つーか、まずは「アトミックな操作」という概念をどっかで調べとけ。 例えば、x86のCPUなんかだと、どういう操作がアトミックかはIntelが規定している。 アトミックな書き込みなら、別のコアからの読み込みが割り込む可能性は無い。逆に アトミックでない書き込みなら、例えば半分くらい書き込んだところで別のコアが 読み込む可能性があるということ。 x86なら、厳密な規定はIntelの英語版サイトに落ちてる。32bitアラインドなreadや writeは確実にアトミックだ。相当古いx86以外はキャッシュアラインドなら大丈夫。 read-modify-writeはLOCKプリフィクスが無い限りアトミックではないが、xchg 命令はLOCK#が自動的にアサートされるのでアトミックだ。 まぁ、アセンブラを直接叩くんじゃなければ、イントリンシック命令を調べておけば 十分だが、その裏でどういうCPUの動きをしているかは理解しといた方がいい。 つーか、低水準の話と高水準の話で全然違いすぎるんだよな。俺はどっちの話でも 構わんけど、分けた方がいいのか?
- 236 名前:226 mailto:sage [2009/12/23(水) 12:53:08 ]
- ありがとうございます
もっと勉強します
- 237 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:31:19 ]
- >>232
そんな事は起きないようにハードウェアが作られてる 物理的なメモリへのアクセス経路は1個しかないから、同じアドレスに同時にアクセス なんて事は出来ない 命令が書いた順に実行されるかとか、他のコアやスレッド云々は >>235 の通り
- 238 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:31:47 ]
- クリティカルセクションを用いって書いてあるから、なんとなくWindowsかと思ってた。
- 239 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:32:15 ]
- >>235
ここはム板だから低水準の話はついていけないと思う
- 240 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:49:38 ]
- >>237
> 物理的なメモリへのアクセス経路は1個しかないから、同じアドレスに同時にアクセス > なんて事は出来ない いつの時代の人?
- 241 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:00:02 ]
- >>239
いやそれは無い
- 242 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:00:28 ]
- ん?今はどこが違うの?
- 243 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:04:04 ]
- >>235
x86は巨視的には古典的設計だからまだ理解しやすいけど、PPCなんかだとリオーダー とかが剥き出しになってくるからさらにごちゃごちゃするんだよな
- 244 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:06:45 ]
- そこでeioioですよ!
- 245 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:07:20 ]
- 間違えた、eieioだった
イーアイイーアイオー!
- 246 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:28:55 ]
- エイッエイッオッー
- 247 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:32:01 ]
- この辺の話題が体系的に書かれてる教科書が欲しい
- 248 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 14:41:39 ]
- 開拓が進行中のジャンルだから、書いたそばから陳腐化しそうでなかなか難しいかも
しれないな
- 249 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:09:39 ]
- 何をもって高性能とするかをはっきりさせたいな
シングルコア100%アイドル3コアでできることを4コア25%ずつで処理することに意味はあるの?
- 250 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:12:36 ]
- >>249
に追記 並列処理の有利はわかるけど、これからは直列処理も並列化しようとしてるんでしょ そんなの意味ないよねという話
- 251 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:50:00 ]
- 1コア100%3コア0%ってCPUがボトルネックになってんじゃねーの
- 252 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:50:26 ]
- 何を言ってるの?
- 253 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:19:08 ]
- >>249は軽くエスパーが日本語に翻訳しないと分かりづらい
4スレッドにしたら全部25%になっちゃうような処理までマルチスレッドにする 意味あんの、って言いたいんだろうし、だからCPU屋は2コアや4コアで現状維持 しながら別の進化の方向性を探ってるのも事実 だがそもそも、そういう微妙なケースにまで頑張って適用しようぜMTマンセー、 というようなスレではないので、そんな的外れなこと言われても一瞬何の話だか 分からんし、今更何をとしか言いようがない
- 254 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:28:43 ]
- >>253
日本語でおk
- 255 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:35:30 ]
- >>253
余ってるCPUに仕事振る余地のない処理なら それでいいんじゃね?
- 256 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:39:14 ]
- >>249の問題提起自体が微妙
アムダールの法則くらいで十分じゃねーの?
- 257 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 18:49:32 ]
- そもそも並列化できない処理まで並列化しようとしてるなんて話は聞いたこともない。
誰が言ったんだそんなこと。
- 258 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 21:49:55 ]
- >>249が言ってるな
- 259 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 03:00:47 ]
- 質問させてください。
【OS】 UNIX/LINUX 【言語】 C言語 【実行環境】 gcc 【その他特記する事項】 メインスレッドからn個のスレッドを作成->全ての終了を待つという場合、 int i; pthread_t id[n]; void* res[n]; for (i=0; i<n; i++) pthread_create(&id[i], NULL, funcptr, arg); for (i=0; i<n; i++) pthread_join(id[i], &res[i]); こんな感じで大丈夫でしょうか? それとWindowsにあるWaitFor〜みたいに複数待つというのは無いのでしょうか?
- 260 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 03:18:30 ]
- >>259
>WindowsにあるWaitFor〜みたいに複数待つ つ developers.sun.com/solaris/articles/event_completion.html
- 261 名前:デフォルトの名無しさん [2010/01/26(火) 00:12:16 ]
- スレッドを終了させないままアプリを閉じた場合
やっぱメモリリークとか起きるの?
- 262 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:20:29 ]
- 環境を想定しないとなんともいえない。
- 263 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:33:22 ]
- >>261
OS破壊されるぞ?いいのかそんなことしても
- 264 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:49:27 ]
- >>261
ja.wikipedia.org/wiki/メモリリーク
- 265 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:22:10 ]
- 破壊されるようなOSなんか使うなw
- 266 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:03:33 ]
- MTでそんな脆いOSはちょっと想像付かないなw
携帯の奴とかはどうなんだろう
- 267 名前:デフォルトの名無しさん [2010/01/26(火) 16:15:09 ]
- 問題(1) 名前を入れる入力ダイアログ1つとボタンを1つ表示し,ボタンを押したときは時間に応じて,
05時〜11時 「おはようございます,○○さん」 11時〜17時 「こんにちは,○○さん」 17時〜05時 「こんばんは,○○さん」 と表示するJavaScriptプログラムを作成しなさい。
- 268 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:20:40 ]
- 断る。
- 269 名前:デフォルトの名無しさん [2010/01/26(火) 16:24:21 ]
- キミの実力を見せてみろ
- 270 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:28:23 ]
- マルチスレッドと何の関係が
- 271 名前:デフォルトの名無しさん [2010/01/26(火) 16:32:31 ]
- スレ違いでした。
すいません・・
- 272 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 17:10:35 ]
- VCでマルチスレッドアプリをトレース実行してるとかなりの頻度でOSごと固まるんですが、
マルチスレッドの場合のデバッグはデバッガ使わないのが普通なんですか?
- 273 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 17:48:30 ]
- PCが貧弱
- 274 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:05:06 ]
- 嫁が貧乳
- 275 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:13:39 ]
- ユーザが頻尿
- 276 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:19:25 ]
- >>272
詳細なテキストサービスをオフにすると少し幸せになれるかも。 ATOK使いの俺には無縁な話。
- 277 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:21:31 ]
- 最近スレッド使い始めました。
クリティカルセクションとかインターロックで変数を共有するのは なんとなく分かりました。 例えばCRITICAL_SECTIONを使う場合、アプリケーションで一つ用意すれば よいのでしょうか? 極端に言えばCRITICAL_SECTIONをグローバル変数として定義して、 EnterCriticalSection等を使えばよろしいのでしょうか?
- 278 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:33:23 ]
- トイレに例えるなら何個個室があっても鍵がすべて連動してトイレにはひとりしか入れないってことだぞ
それでいいのか?
- 279 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:44:28 ]
- それでも良いが性能は良くない
性能向上のためにスレッドを使っているわけではないのなら、別に構わない 無理にシングルスレッドで処理するよりマルチスレッドの方が可読性が高くなることもあるからな 性能を上げたいのなら一人がどこかでロックを握ってる間全員が待たされるような構造は良くない
- 280 名前:277 mailto:sage [2010/02/03(水) 00:18:41 ]
- なるほど。問題点の指摘ありがとうございます。
では、3つスレッドがあるとして、1つは無関係で2つのスレッドで 変数を共有する場合は、クリティカルセクションをどう使えば よろしいのでしょうか? 各スレッドループ中にCRITICAL_SECTIONを定義してりようすればよろしいのでしょうか? 何か根本的に勘違いしている気がしている気がします。
- 281 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:32:42 ]
- 共有する変数がグローバルで1個しかないのならクリティカルセクションもグローバルで1個でいいよ
- 282 名前:277 mailto:sage [2010/02/03(水) 00:50:34 ]
- 現在は全体からアクセスできる変数が一つです。
一気にやろうとはしないで少しずつ複雑なパターンを試してみます。 あと環境はWindowsです。失礼しました。
- 283 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:35:14 ]
- まあロックが1つで済むならデッドロックとか考えなくて済むし
可能ならその方が悩まない。 パフォーマンスの問題は、占有期間次第とも言えるから。
- 284 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:19:04 ]
- クリティカルな部分一個をトイレの個室一つと考える
- 285 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 04:12:03 ]
- たまに鍵かけないやつがいてトラブるんだ
- 286 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 07:23:37 ]
- そうするとトイレの中に
トイレがあって、その中にまたトイレがないと 説明不可能だろ。 トイレはネストできねーだろ
- 287 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 09:11:21 ]
- そうかクリティカルセクションはネスト出来たか
- 288 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 11:33:20 ]
- じゃあトイレがバスルームにあるということで
- 289 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 11:42:57 ]
- 階層数に制限があるからダメ。
- 290 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 11:52:56 ]
- トイレ中に地震がくるのと
小便中に大便を催すのと どっちが我慢できる?
|

|