2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

マルチスレッドプログラミング相談室 その9

1 :デフォルトの名無しさん:2012/06/15(金) 01:31:57.88 .net
マルチスレッドプログラミングについて語るスレ

■前スレ
マルチスレッドプログラミング相談室 その8
http://toro.2ch.net/test/read.cgi/tech/1253521167/

■過去スレ
その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/
その7 ttp://pc12.2ch.net/test/read.cgi/tech/1215253576/

OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ
【OS】
【言語】
【実行環境】
【その他特記する事項】

2 :デフォルトの名無しさん:2012/06/15(金) 01:35:25.58 .net
■関連スレ・関連性の高いスレ

ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/

3 :デフォルトの名無しさん:2012/06/15(金) 03:59:42.18 .net
>>1

前スレ >>994
並列実行「可能」でも「スケールする」かは知らんぞ。

OpenMP なら !$omp parallel do としてコンパイルオプション /Qopenmp

4 :デフォルトの名無しさん:2012/06/15(金) 16:15:07.07 .net
>>前すれ995
そういうオプションがあるのですね,レポートと書き直したソースを添付します.

http://www5.puny.jp/uploader/download/1339744079.zip
pass:giko

potential OUTPUT 依存関係
らしいですが,ググってもよくわかりません.依存関係がないように>>前すれ999のようにpureに書き換えたのですが.

>>前すれ997
これは試しにつけてみただけのものです,やはり使い方が違いますか・・.


5 :デフォルトの名無しさん:2012/06/15(金) 18:14:50.61 .net
gfortran -O3 20120528_fast_pararell_subroutine.f90 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=2

6 :デフォルトの名無しさん:2012/06/15(金) 18:54:01.14 .net
彼女二人と同時にデートする時はマルチスレッドじゃないといけないんだけど
どうすればいいかな

7 :デフォルトの名無しさん:2012/06/15(金) 19:08:46.12 .net
時分割でがんばれ

8 :デフォルトの名無しさん:2012/06/15(金) 21:41:34.19 .net
Analyzing loop at 20120528_fast_pararell_subroutine.f90:237
237: not vectorized: not suitable for gather D.2660_224 = *shoi_69[D.2659_223];
Analyzing loop at 20120528_fast_pararell_subroutine.f90:196
196: not vectorized: not suitable for gather D.2600_148 = *a_147(D)[D.2599_146];
Analyzing loop at 20120528_fast_pararell_subroutine.f90:150
150: not vectorized: loop contains function calls or data references that cannot be analyzed
Analyzing loop at 20120528_fast_pararell_subroutine.f90:131
131: not vectorized: not suitable for gather D.2767_169 = *a_86(D)[D.2766_168];
Analyzing loop at 20120528_fast_pararell_subroutine.f90:91
91: not vectorized: not suitable for gather D.2704_87 = *a_86(D)[D.2703_85];
Analyzing loop at 20120528_fast_pararell_subroutine.f90:37
37: not vectorized: not suitable for gather D__I_lsm.780_635 = MEM[(real(kind=8)[0:] *)D.2433_241][pretmp.758_17];
Analyzing loop at 20120528_fast_pararell_subroutine.f90:38
38: not vectorized: not suitable for gather D.2485_318 = MEM[(real(kind=8)[0:] *)D.2298_95][D.2484_317];




9 :デフォルトの名無しさん:2012/06/16(土) 12:26:31.55 .net
>>4
ループ間で出力変数に依存関係があるかも、という判断。

○ i, j は value 属性を付け、b は戻り値にする。
○ サブルーチン inv の宣言部に interface で sho_det の引数属性を書く。

ここまでで依存はクリア、反復回数が少ないかも、というようになる。
/Qpar-threshold0 オプション (100〜0) で並列化は完了。

10 :デフォルトの名無しさん:2012/06/16(土) 12:48:12.18 .net
bに依存がないことくらい解析できてもよさそうなのにね

11 :デフォルトの名無しさん:2012/06/16(土) 16:27:05.54 .net
sho_det呼び出しの2重ループで並列化できるの?

12 :デフォルトの名無しさん:2012/06/16(土) 16:52:50.21 .net
双子と付き合う時はマルチスレッドのチンポ子が欲しい。

13 :デフォルトの名無しさん:2012/06/16(土) 16:54:32.86 .net
クリティカルセクションとかミューテクスって重いんですか?
秒間2500回とかマジキチですか?

14 :デフォルトの名無しさん:2012/06/16(土) 17:00:15.54 .net
400μ秒は今のパソコン環境でも、厳しいんじゃね
何をしたいかにもよるけど、専用環境作ったほうがハマらんかもね

15 :デフォルトの名無しさん:2012/06/16(土) 17:19:32.25 .net
ロックフリー!

16 :デフォルトの名無しさん:2012/06/16(土) 17:33:56.57 .net
>>13
そのあたりだと、API 呼び出しのオーバーヘッドもバカにならないから
自前で実装したほうがいいんじゃね?

17 :デフォルトの名無しさん:2012/06/16(土) 21:17:30.95 .net
https://gist.github.com/2841832
によれば
> Mutex lock/unlock 25 ns

18 :デフォルトの名無しさん:2012/06/16(土) 22:25:28.46 .net
>>13
重いけどそれくらいならいけると思う
できるならスレッドごとにリソースもって
最後に合体させたほうが速い

19 :4:2012/06/16(土) 23:07:53.93 .net
申し訳ありません,並列化ですが,解決しました.
/Qpar-threshold(並列化のしきい値)の値を100から20ぐらいまで下げたら5スレッドで実行されました.

ただ,ものすごく,計算が遅くなってしまって,なおかつ不必要なところまで並列化されてしまったようです.
このループだけ並列化したいっていうような指定ってできるのでしょうか?


20 :デフォルトの名無しさん:2012/06/16(土) 23:18:15.13 .net
>>17
Mutexってスレッド数によると思うんだけどな。
シングルコアならオンキャッシュで対応できるけど、
マルチコアだったりマルチCPUだったらメモリ参照と大差ないと思う。

21 :デフォルトの名無しさん:2012/06/17(日) 02:24:44.41 .net
答え教えてもらって、闇雲にやるのが今風なの?

22 :デフォルトの名無しさん:2012/06/17(日) 02:28:46.34 .net
それって、単純ループがスレッド化されただけじゃねえの?

23 :デフォルトの名無しさん:2012/06/17(日) 03:56:01.16 .net
実行環境に寄って自動で最適化して欲しいよね。
ちょっと違うけどjitみたいに自分でプロファイルとって実行処理罹る所を重点的に最適化とかさ。

4coreの環境と64coreの環境といちいち最適化するのめんどくさい。

24 :デフォルトの名無しさん:2012/06/17(日) 04:08:44.71 .net
core数増えたから、早くなるってわけでもないでしょうに

25 :デフォルトの名無しさん:2012/06/17(日) 06:28:14.10 .net
効率が悪かろうと並列化したいループには !DEC$ PARALLEL ALWAYS
※ 依存性に目をつぶれという指示ではない

> 64core の対応
3日かかる計算を1時間に押し込みたいなら、やる価値はある。
1分の処理が1秒になることを期待するなら、最適化する時間のほうが長い。

そもそも、大体の 64core での性能問題は 4core では小さくて見えないだけ。
スケールするとかしないとかはそういう話。

26 :デフォルトの名無しさん:2012/06/17(日) 14:48:00.38 .net
速くなってくれないと高額な多コア買った意味無いんだが。

27 :デフォルトの名無しさん:2012/06/17(日) 19:02:58.50 .net
それは、プログラム作ったベンダーに言え。
場合によっては、どれくらい高速化するかの見積もりくらい出してくれるだろ。

28 :デフォルトの名無しさん:2012/06/17(日) 20:27:37.75 .net
分散処理できるように考えるほうが難しいのに
道具によってはできることとできないことがあるでしょ

29 :デフォルトの名無しさん:2012/07/06(金) 19:30:56.61 .net
多コア化すれば、将来は、割込優先スレッド用コア、時分割スレッド用コア、OS用コアに別れて、それぞれのコアが空き時間でどうでもしてくれスレッドを処理するようになる気がする。
そうしないとスケジューリングに費やすコストが無駄だ。

30 :デフォルトの名無しさん:2012/07/06(金) 19:38:42.21 .net
あまり賢そうに見えないな

31 :デフォルトの名無しさん:2012/07/06(金) 19:45:56.15 .net
gpuが標準的になった時点で、非対称プログラミングが当たり前になるから、コア間に使い分け、役割分担が発生するのは必然じゃないかな。もっともどのコアがどの役割をやるかは、スケジューラが決めることになるけど。

32 :デフォルトの名無しさん:2012/07/06(金) 19:58:44.83 .net
標準的な入出力は動くコア決めたほうがいいかもしれんけど
プロセス、スレッドはどのコアで動こうが関係無いような
どうせ、暇な?コアに割り当てられるだろうから

33 :デフォルトの名無しさん:2012/07/06(金) 20:28:22.95 .net
linuxだとこういう指定が出来るようだ
ttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sched_setaffinity.2.html

34 :デフォルトの名無しさん:2012/07/06(金) 22:01:45.18 .net
それぐらいは WindowsNT 4.0 からあるが。

SetProcessAffinityMask
http://msdn.microsoft.com/ja-jp/library/cc429334.aspx

35 :デフォルトの名無しさん:2012/07/06(金) 22:04:26.89 .net
コア数とかうるさい割にapiのことは言わんのね?

36 :デフォルトの名無しさん:2012/07/21(土) 14:53:22.69 .net
pスレッドについて教えてください。


関係性のない処理を行う2つのスレッドA、Bを同時に動かし始めたいのですが、

・スレッドAの待ち状態にpthread_cond_wait(&cond, &mutex1);

・スレッドBの待ち状態にpthread_cond_wait(&cond, &mutex2);

として(condは同じで、mutexが異なる)、これらを動かし始めるために別スレッドで

pthread_cond_broadcast(&cond);

をコールしたのですが、思ったとおりに動いてくれません。
なにがいけないのでしょう?
(pthread_cond_wait()の使い方を間違えている?)

37 :デフォルトの名無しさん:2012/07/21(土) 14:57:02.99 .net
馬鹿には無理

38 :デフォルトの名無しさん:2012/07/21(土) 15:18:21.14 .net
>>36
broadcast を受ける側のスレッドは、 broadcast するときに wait していなければいけない
broadcast したときに wait しているスレッドがいなければ、無駄撃ちになる
通常 cond が mutex と一緒に使われるのは、ターゲットが wait に入る一瞬前に broadcast を撃って運悪く外れたりするような事態を回避し、確実に当たるようにするため
思ったとおりに動いてくれないというのなら、あなたの使い方には何か誤りがあって、そういった問題を防ぎ切れていないのだろう

39 :デフォルトの名無しさん:2012/07/21(土) 15:33:58.32 .net
>>38
素朴に待っていると思っていたスレッドが、実は待っていないせいで
シグナルがすり抜けていたということですね

このての、「関数を素朴に並べただけでは思いどおりに動作しない」問題の対応方法には
それぞれに決まった「お作法」「イディオム」がありそうな気がしますが、どうなんでしょう?


ともかく、ありがとうございました

40 :デフォルトの名無しさん:2012/07/21(土) 15:42:20.05 .net
>>39
pthreadの粒度が小さい場合、threadの実行順序がぐだぐだになるから要注意。
結論としては、充分長い処理でもない限りcond_waitは使えない。

41 :デフォルトの名無しさん:2012/07/21(土) 15:49:59.71 .net
>>40
頭で考えたアルゴリズムを実験するときに「安全装置」を省略したせいで
かんたんなこーどなのにはまるなんてありそうですね・・・・

自分が使いたい本番コードは、各スレッドの処理に十分なマスがあるので
素朴なつくりでもそれなりに動いたかもしれませんが、
再現性のないトラブルが発生する前にそういう問題を認識できてよかったです

ありがとうございました

42 :デフォルトの名無しさん:2012/07/21(土) 16:06:39.87 .net
>>41
去年の暮れ辺りに悩んでいたのが、mutexでスレッドプールを管理していたツールなんだよね。
mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
自分が待たずにロックしちゃうことに。
メインスレッドでmutex_unlock(); mutex_lock()のように書いているのにunlockしたあと
lockするところまで実行できないなんてちょっと想像しにくいぞ。
# 詳細不明だけど、unlockした時点でプールスレッドがスケジュールされてメインスレッドがスケジュールからはずされるっぽい。

43 :デフォルトの名無しさん:2012/08/25(土) 18:20:47.36 .net
いつでもどんな時にでも
スケジュールから外されても動かされても
大丈夫なように作るのが鉄則

44 :デフォルトの名無しさん:2012/08/26(日) 08:54:03.71 .net
そうそう。
だから、Web上のサンプルは当てにならない。

45 :デフォルトの名無しさん:2012/08/26(日) 09:32:08.49 .net
そもそも並列化したいのは高速に処理したいからじゃん?
サンプルにかならずあるsleep()を消すと、途端にまともに動かなくなる
まともに動かなくなるならまだいいけど、「ときどき動作がおかしい」これ最悪

46 :デフォルトの名無しさん:2012/08/26(日) 09:34:18.81 .net
て言うかサンプルってそういうもんだし。

そもそも >>42

> mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
> 自分が待たずにロックしちゃうことに。

って書いてるけど、それ以外にどんな動作を期待してるのか、よくよわからん。

47 :デフォルトの名無しさん:2012/08/26(日) 09:57:42.57 .net
マトが止まっていないとシグナルがすり抜けちゃうなんて最初はわかんないでしょ

そんなことより、マトがトマるだって・・・・・!喜w

48 :デフォルトの名無しさん:2012/09/01(土) 15:54:33.37 .net
ダレモイナイ・・・・・・ダジャレオソルベシ・・・・・


素朴なQなんですが、マルチCPUのマシンで、

@ひとつのプロセスに属するスレッドは、全部同じCPU(プロセスがいる)で動く

Aひとつひとつのスレッドが独立してCPUを渡り歩いているように見えるのは、
 スレッド単体ではなく、それの属するプロセスが渡り歩いているため



こういう理解は正しいですか?

49 :デフォルトの名無しさん:2012/09/01(土) 15:58:04.54 .net
スレッドの割り当てとかはOSが決めてることだからね
OSの挙動に影響しないようなことを考えながらやりませう

マルチCPUじゃなく
単一CPUの時のスレッド等の挙動を考えてみませう

50 :デフォルトの名無しさん:2012/09/01(土) 16:04:51.98 .net
同じプロセッサ内のコアを移動するならまだしも、別のプロセッサに移動してしまったら、
せっかく溜め込んだキャッシュがおじゃんになってしまうのではないでしょうか?

51 :デフォルトの名無しさん:2012/09/01(土) 16:11:29.80 .net
逝ってるなマルチコアはCPU毎に命令データキャッシュ持ってるでしょ

52 :デフォルトの名無しさん:2012/09/01(土) 16:12:43.77 .net
でも分岐したらダメなのでは?

53 :デフォルトの名無しさん:2012/09/01(土) 16:16:42.15 .net
よく考えたら、分岐するんだったらCPU移らなくてもダメだった
ドピュッ

54 :デフォルトの名無しさん:2012/09/01(土) 16:27:35.25 .net
命令の先読みとかやってるの知ってる?

同じ領域を読み込む場合に早くなるってのがキャッシなのでは?

HDDキャッシュとかも同じでしょ

55 :デフォルトの名無しさん:2012/09/01(土) 16:29:03.73 .net
別のプロセッサに移動してしまったらキャッシュとかおじゃんになってしまうかもしれないが、
ひとつのプロセッサに多数のスレッドが集中して別のプロセッサを遊ばせておくくらいならいくつかのスレッドを移した方がいい場合もある
OSの裁量次第

56 :デフォルトの名無しさん:2012/09/01(土) 16:32:16.93 .net
キャッシュ知らんでも
スレッド系のプログラム作るのには関係無いような

速度ウンタラは動いてから考えればいい話でしょ

57 :デフォルトの名無しさん:2012/09/05(水) 01:11:52.99 .net
初心者の質問です

new;した領域 p があって
スレッドAは条件によってdelete p;をする
スレッドBはpを参照する

この時に
変数 blReference, blDeletingを使って

Aの処理中 delete部分
while( blReference ){ Sleep(1); }
blDeleting= true;
delete p;
p = NULL;
blDeleting = false;

Bの処理中 参照部分
while( blDeleting ){ Sleep(1); }
blReference = true;
char* cp = (char*)p:
//以下参照
blReference = false;

っていうのは安全でしょうか?


58 :デフォルトの名無しさん:2012/09/05(水) 04:17:50.83 .net
>>57
先ず基本的にblReference, blDeletingとも、きちんと扱えるようにしないとダメ。
要は、OSの用意しているクリティカルセクションなどの機構を使う必要がある。
つーか、マルチスレッドプログラミングの基本なんだが、大丈夫なんか?
それと、cpにNULLが代入されること自体は問題ないの?

59 :デフォルトの名無しさん:2012/09/05(水) 06:16:48.24 .net
weak_ptr使えハゲと言うしかないレベル

60 :デフォルトの名無しさん:2012/09/05(水) 08:13:29.83 .net
weak_ptrってboost?
マルチスレッドを考慮されていたの?

61 :デフォルトの名無しさん:2012/09/09(日) 01:13:55.50 .net
>>58
volatileしておけば、
まあいいんじゃない

sleep で待つのは効率はよくなさそうだけど


62 :デフォルトの名無しさん:2012/09/09(日) 01:44:44.97 .net
volatile使ったとしてもコンパイラによっては安全だとは言えないんだよ

63 :デフォルトの名無しさん:2012/09/09(日) 01:51:51.18 .net
安全って、思いたい理由の方に興味があるんだけど

64 :デフォルトの名無しさん:2012/09/09(日) 07:41:49.96 .net
むしろ安全だといえるコンパイラを知りたい

65 :デフォルトの名無しさん:2012/09/09(日) 14:24:32.10 .net
volatile使っても結果変わらない事の方が多い気がする

66 :デフォルトの名無しさん:2012/09/09(日) 15:54:34.19 .net
そりゃそうだ

67 :デフォルトの名無しさん:2012/09/09(日) 16:30:00.96 .net
安全だと思うと、コンピュータがそれを理解して動いてくれると思いたいのかな

68 :デフォルトの名無しさん:2012/09/12(水) 00:03:54.96 .net
volatileしてダメだったケースに遭遇したことないなあ。

まあboolでの同期・排他は簡単なケースにしか使ってなくて、
まじめなのはcritical sectionとかmutexで排他・同期するから
気がついてないだけかもしれないけど。

69 :デフォルトの名無しさん:2012/09/12(水) 07:22:51.47 .net
>>57
>// スレッドA
>while( blReference ){ Sleep(1); } // 1
>blDeleting= true; // 3

>// スレッドB
>while( blDeleting ){ Sleep(1); } // 2
>blReference = true; // 4

スレッドの処理が時間的に番号の順で行われる場合がある。
つまり、この処理はスレッド間の排他にはなっていない。
おとなしくクリティカルセクションを使ってロックした方がいい。

70 :デフォルトの名無しさん:2012/09/22(土) 01:53:58.20 .net
>>69
InterlockedExchangePointerは?

71 :デフォルトの名無しさん:2012/09/29(土) 20:38:32.52 .net
質問ですが、Windows APIのSetEvent()やWaitForSingleObject()って、
内部で適切にメモリバリアを行うことが保証されていますか?

例えば、下記のケースにおいて、_WriteBarrier()や_ReadBarrier()は冗長?
(メインスレッド側)
 bTerminate = true;  // volatile bool型
 _WriteBarrier();
 SetEvent(hEvent); // スレッドを起床させる

(ワーカースレッド側)
 WaitForSingleObject(hEvent);  // 起床されるまで待つ
 _ReadBarrier();
 if (bTerminate) { .... } // メインスレッドから通知されたbTerminateに基づく処理


72 :デフォルトの名無しさん:2012/09/29(土) 20:49:37.13 .net
も一個、volatile bool a, b; があるとして、
 a = c;
 b = d;
の代入順序は、a, bがたとえatomicな型でvolatileだからといって
プロセッサのアウトオブオーダー実行のレベルでは実施される順序が保たれる保証はない、
よって、上記代入を行ったコア以外のコアからaやbを代入順序依存で参照する場合は
メモリバリアが 必 須 、
という理解で合っていますか


73 :デフォルトの名無しさん:2012/09/29(土) 21:08:56.80 .net
>>71
http://msdn.microsoft.com/en-us/library/ms686355%28VS.85%29.aspx
> The following synchronization functions use the appropriate barriers to ensure memory ordering:
> ・Functions that enter or leave critical sections
> ・Functions that signal synchronization objects
> ・Wait functions
> ・Interlocked functions

>>72
はい

74 :デフォルトの名無しさん:2012/09/30(日) 00:03:39.72 .net
>>64
javacやcscじゃね

75 :デフォルトの名無しさん:2012/09/30(日) 00:12:53.41 .net
メモリバリアってのはgcc特有の表現で
atomicな処理とは関係ないんだけど

76 :デフォルトの名無しさん:2012/09/30(日) 00:30:58.05 .net
>>73
dクス
SetEvent()は2番目(・Functions that signal synchronization objects)、
WaitForSingleObject()は3番目(・Wait functions)ってことでおkそうですね

>>75
メモリバリアはアウトオブオーダー実行するアーキテクチャに共通する概念であってGCC固有というわけではないですにょ
とかいろいろあるが説明がマンドクセ、

77 :デフォルトの名無しさん:2012/09/30(日) 00:56:39.75 .net
ただの最適化抑止のおまじないみたいなもんだよ

78 :デフォルトの名無しさん:2012/09/30(日) 01:05:56.81 .net
>>77
ちょっそれvolatileの方wwwww

まあ>73の通り、Windows API内部でよろしくやってくれるので普通はメモリバリアの方は意識しなくて良いっぽい
おそらくUNIXのシステムコールも同様でよろしくやってくれるから知る人ぞ知る知識になってしまうのだろう…


79 :デフォルトの名無しさん:2012/09/30(日) 01:13:58.15 .net
マルチコア時代の並列プログラミング
〜ロックとメモリオーダリング〜
http://www.nminoru.jp/~nminoru/data/b2con2006_nminoru.pdf


80 :デフォルトの名無しさん:2012/09/30(日) 01:14:33.03 .net
gccのvolatileってのは、ちょっと特殊なんだよ

81 :デフォルトの名無しさん:2012/09/30(日) 01:21:19.22 .net
>>77,78
真相はもっと複雑怪奇だったりする
http://yamasa.hatenablog.jp/entries/2009/07/20
http://msdn.microsoft.com/ja-jp/library/bb310595%28VS.85%29.aspx

つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…


82 :デフォルトの名無しさん:2012/09/30(日) 01:26:29.84 .net
ここらへんの話は
 ・(インラインでない)関数呼び出しの副作用を恐れてコンパイラが最適化を自粛
 ・volatileによって明示的に最適化が抑制
 ・システムコール内でメモリバリアの面倒をみてくれる
 ・ハードウェアがコア間でキャッシュのコヒーレンスをとってくれる
といった事情が絡み合った結果、運よく問題を生じないケースも多々あるので
コードをバリバリ書いているような人でもきちんと理解していないことがある(あった)


83 :デフォルトの名無しさん:2012/09/30(日) 01:27:48.80 .net
アトミック変数とか作って、ド素人に誤解釈されたらどうすんだろ、この人

84 :デフォルトの名無しさん:2012/09/30(日) 02:22:23.12 .net
>>81
> つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…
そこで面倒を見てくれるのは「release/aquireメモリバリアとしてのみ」であることに注意。
http://yamasa.hatenablog.jp/entry/20090816/1250446250
こっちのSequential consistencyの性質は、VC++2005以降のvolatileでも持っていない。

85 :デフォルトの名無しさん:2012/09/30(日) 13:33:02.65 .net
>>83
ドシロウトがなんでスレッド使った開発に加わるんだよ

86 :デフォルトの名無しさん:2012/09/30(日) 13:35:58.01 .net
なんで排他の話ばっか出てくるんだ。
スレッド間で書き換えしまくるような変数なんて殆ど無いだろ。

それはともかく、C++向けのクロスプラとフォームなスレッドキューって無いものか。

87 :デフォルトの名無しさん:2012/09/30(日) 14:26:20.27 .net
>>86
>なんで排他の話ばっか出てくるんだ。

マルチスレッドで問題になるところと言うか、排他を最近覚えた奴が
使いたくてしょうがないんだろ。

88 :デフォルトの名無しさん:2012/09/30(日) 15:13:14.28 .net
>>86
スレッドの実装が違うだろう、LinuxとUNIXなら同じだが

89 :デフォルトの名無しさん:2012/09/30(日) 15:25:27.37 .net
>>85
じゃあ、うわっつらの言葉だけ知ってる甘ちゃん系ではどう?

90 :デフォルトの名無しさん:2012/09/30(日) 16:54:17.48 .net
>>88
boostとか抽象化レイヤー用意すればできるだろ。

しかし、仕様の安定したスレッドキューがない。
もう、自作スレッドキューを保守するのは嫌だお

91 :デフォルトの名無しさん:2012/09/30(日) 17:01:09.98 .net
>>90
皮かぶせりゃいいだろうけど、

そこまでして、

そこまでしても

92 :デフォルトの名無しさん:2012/09/30(日) 21:04:28.14 .net
おまえら何回C++におけるatomicとvolatileの話を繰り返せば気がすむの


93 :デフォルトの名無しさん:2012/09/30(日) 21:20:03.98 .net
それしかネタがないからさ

94 :デフォルトの名無しさん:2012/09/30(日) 22:09:45.89 .net
>>92
スレッドキューの話しだせ

95 :デフォルトの名無しさん:2012/09/30(日) 23:24:16.01 .net
だって手法なんて先駆者が出し尽くしただろ

96 :デフォルトの名無しさん:2012/09/30(日) 23:53:26.29 .net
スレッドキューって何だ?
スレッドセーフなキューってことか?
それともGCDみたいなタスクキューのことか?

97 :デフォルトの名無しさん:2012/10/01(月) 00:06:38.53 .net
タスクキューのことだよ。
てかスレッドセーフなキューってなんだよ。それだったら
別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。


98 :デフォルトの名無しさん:2012/10/01(月) 07:53:47.16 .net
java.util.concurrent.BlockingQueueのことだろ


99 :デフォルトの名無しさん:2012/10/12(金) 23:18:24.02 .net
同期処理を間違いなく設計するための、何か良い手法やツールはないですかね?

ペーペーのビギナーだというのもあるのですが、
複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、
waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、
そのデバッグで無駄に体力を消耗しています

100 :デフォルトの名無しさん:2012/10/13(土) 11:18:48.75 .net
馬鹿には無理

116 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★