- 1 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 11:23:05 ]
- マルチスレッドプログラミングについて語るスレ。
OS・言語・環境は問わないが、それゆえ明記すべし。 その1 pc3.2ch.net/test/read.cgi/tech/997345868/ その2 pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 pc8.2ch.net/test/read.cgi/tech/1098268137/
- 755 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 01:02:29 ]
- 読むのと同時に書かないと壊れるメモリもあるだぜ?
- 756 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 01:19:47 ]
- 「atomic」は日本語で言ったら「不可分」ちうことですわ。
- 757 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 01:23:06 ]
- 原子力って感じかと思ってた
- 758 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 03:38:13 ]
- 分割不可能な最小単位つうことですょ
- 759 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 03:51:04 ]
- つまり、鉄腕アトムは分割不可能と言うことで宜しいか。
- 760 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 04:08:01 ]
- 「atomic」には他に「原子の」みたいな意味もあるんですわ。
昔は原子(atom)は物質の不可分な最小単位と考えられていたので。 どっちの意味が先か知らんけどね。
- 761 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:05:02 ]
- で、何が言いたいんだ?
- 762 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:11:33 ]
- atomic bomb 分割不可能な爆弾
- 763 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:12:41 ]
- 割ったら被爆しちゃうからね
- 764 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:17:17 ]
- >>761
誰でも知ってるような事をちょっと偉そうにしゃべくってみたかっただけですわ。
- 765 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:18:59 ]
- 被爆と被曝
- 766 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:55:02 ]
- >>764
何のために?
- 767 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 07:57:34 ]
- >>760
なに一生懸命説明してるの? これスレでそんなこと知らない奴なんてあまりいないよ。
- 768 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 08:37:02 ]
- 「同時」って書いちゃうヤツ以外はね。
- 769 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 08:45:15 ]
- VRAM(昔のやつ)やWRAM(初代Milleniumが採用した奴)を思い出した。
- 770 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 09:45:01 ]
- >>768
どこが変なのか未だにわからんのだが? 「読み込みと書き込みが同時に出来ない」 だから 「読み込みと書き込みをatomicに出来ない」(バスロックしなければ) という意味なんだけど?
- 771 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 09:48:31 ]
- >>764
俺は知らなかったからタメになりましたよ 一応ありがとう
- 772 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 09:53:42 ]
- この流れ見て、コンカレントとパラレルの違いが理解出来なかった当時を思い出した
- 773 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 10:49:55 ]
- 既に「atom」という言葉があるからこそ、物質の探求の過程で原子にその言葉を当て嵌めたってことくらい
>758を理解していたら考えるまでもないだろ。
- 774 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 11:02:32 ]
- >>770
同時(simultaneous)と、不可分(atomic)の違い。
- 775 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 11:03:28 ]
- 意味が分からねえ・・・
- 776 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 11:10:09 ]
- >>770
恥の上塗り
- 777 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 12:38:57 ]
- ガキ共の言葉遊びここまで
- 778 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 12:49:23 ]
- じゃあ今から大人の言葉遊びか・・・エロス
- 779 名前:736 [2006/08/04(金) 13:14:37 ]
- if (g = g ? false : true)
この場合でも排他にならない?? アホですまん
- 780 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 13:19:58 ]
- C言語のレベルでどの式がアトミックになるかという事に依存するのが間違いだと思う。
現存する全ての環境でアトミックに実行されるような式でも、それは処理系依存。
- 781 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 13:21:37 ]
- その後、原子は分割可能であることが判明してしまいました。
- 782 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 13:25:55 ]
- 陽子と電子に分割できるんだっけ?
- 783 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 13:27:46 ]
- あと中間子
- 784 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 13:40:08 ]
- それらの素粒子も実は更に……
つーのはやめておこうか。
- 785 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 14:05:25 ]
- >>779
そもそもどう排他したいの?
- 786 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 14:21:49 ]
- mkdir() は atomic らしい
- 787 名前:779 mailto:sage [2006/08/04(金) 14:38:19 ]
- リスト処理でつなげるときに排他したいけど
WinAPI使うしかないみたいですね
- 788 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 14:39:02 ]
- デッドロックになってしまった場合に
一定時間後に解除するような作りにしたいとき mkdir() だと unlink() すると atomic では なくなってしまう危険があるので rename() の方が良いそうです www.din.or.jp/~ohzaki/perl.htm
- 789 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 15:16:39 ]
- >>779
もう諦めて、素直に同期オブジェクト使いなさい。
- 790 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 15:28:11 ]
- mutex使わないのはなぜですか
- 791 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 17:00:56 ]
- Windowsでプロセス内だけでいいならCriticalSectionのほうが速いんじゃなかったっけ
- 792 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 18:32:01 ]
- >>787
それならCriticalSectionで十分
- 793 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 18:35:59 ]
- >>787
これもAPIになるけど、InterlockedCompareExchangeとかでも自分でロックを作れる。 ただ、CriticalSection使うほうが簡単でおすすめ
- 794 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 22:35:03 ]
- >>755
> 読むのと同時に書かないと壊れるメモリもあるだぜ? kwsk
- 795 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 22:42:15 ]
- それはリフレッシュのことかね。
- 796 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 22:56:05 ]
- 「メモリなどの外部デバイスに対して複数の入出力をatomicに行うには同時にやるしかない。ロックしないならば」
という文章があったとします。 この文章の最後を無視して 『メモリなどの外部デバイスに対して複数の入出力をatomicに行うには同時にやるしかない』 だけを引用して 「ロックすればいいじゃん。バカじゃねーの?」 と書き込むのは、とても恥ずかしいですね。 では、前半部も無視して 『atomicに行うには同時にやるしかない』 だけを引用し、 「同時とatomicは違うだろ。バカじゃねーの?」 と書き込むのは、どのくらい恥ずかしいことなんでしょうかね。 まあ夏休みだから、「こくご」の能力がちょっと不足している人が現れるのも 仕方ないかもしれませんが。
- 797 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 23:29:16 ]
- 746 名前:デフォルトの名無しさん:2006/08/03(木) 23:05:44
アセンブラまで降りる必要は必ずしも無いとは思うが メモリの読み込みと書き出しを同時(atomic)に行うことは (普通は)出来ないということくらいは知っておく必要がある。
- 798 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 23:34:11 ]
- >>797
ロックすれば、読み込みと書き出しを同時に行わなくてもatomicに実行できるよ
- 799 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 23:43:27 ]
- >>795
D-RAM は、読んだらデータが壊れるから再書き込みするけど、 あれは読んだデータを後から書き込んでるから同時じゃない。 正解を教えてくれ >>755 >>796 > という文章があったとします。 どこに? 君の脳内? ちょっと頭冷やせよ。
- 800 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 23:45:22 ]
- そんなの基礎知識でしょ
- 801 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 23:47:39 ]
- 文脈や前提を無視して言葉尻をとらえるのが大好きな方がいらっしゃるようで。
- 802 名前:デフォルトの名無しさん mailto:sage [2006/08/04(金) 23:48:16 ]
- で、そういう人には揶揄や皮肉は通用しませんね。
- 803 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 00:15:01 ]
- 746 名前:デフォルトの名無しさん:2006/08/03(木) 23:05:44
アセンブラまで降りる必要は必ずしも無いとは思うが メモリの読み込みと書き出しを同時(atomic)に行うことは (普通は)出来ないということくらいは知っておく必要がある。
- 804 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 00:28:38 ]
- >>787
排他だけなら、アセンブラとか、asm文とか使えばいいけど、 CPUを離すのは、API使わないと無理。 # というか使った方がいい。 # ユーザランドだけで実装されたマルチスレッドライブラリもあるけどさ。
- 805 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 00:31:32 ]
- 破壊読み出しなのは、コアメモリもそう
- 806 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 01:45:45 ]
- >>803
もちろん、プロセッサはそのための命令を(普通は)用意しているが コストがかかるため、普通にソースを書いた場合 コンパイラはその命令を使ったコードは出力しない。
- 807 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 02:10:07 ]
- ( ゚д゚)ポカーン
- 808 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 02:18:37 ]
- 急に暑くなったからな。
そっとしておいてやれ。
- 809 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 02:23:40 ]
- 最近近くに引っ越してきたvolatile asmというものですが何か?
- 810 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 02:31:33 ]
- >>746
- 811 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 09:44:05 ]
- volatile最高!!!
無駄にmutexしてる奴、馬鹿杉www sizeof(int)以下ならlockなんて不要www
- 812 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 09:54:47 ]
- 本気で言ってんの?
だからvolatileと排他のロック概念は関係ないっつーの。 volatileは他のコンテキストや割り込みで変更される可能性 があることをコンパイラに知らせて最適化を抑制するだけ。 >sizeof(int)以下ならlockなんて不要www 大抵はうまく行くだろうが、時たま失敗するだろう。 以下を沢山のスレッドつくって呼び出しまくってみな。 volatile int a,b; void foo(){ a++; InterlockedIncrement(&b); } しばらく走らせていたらaとbが一緒になるか?
- 813 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 10:14:01 ]
- >>811
本気で言っているとしたら 知らない人が知らないところで働いていることを理解できないようですね
- 814 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 10:18:41 ]
- >>812
この人なんかずれてる…
- 815 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 10:30:47 ]
- どの辺がすれてるのかkwsk
- 816 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 10:33:19 ]
- 字下げが
- 817 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 12:49:28 ]
- オチがよろしいようで
- 818 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 14:56:34 ]
- >>815
>>811は書き込みの話はしていない、ってことじゃ? データバスサイズのリードの話に限定するなら、 普通はバスレベルでも割り込まれることはないから わざわざバスロックする必要はないと。 「無駄にmutex」がツボだと思うんだけど、ちとエスパーすぎるかな。
- 819 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 15:16:29 ]
- やさしすぎだと思う。
- 820 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 16:42:27 ]
- そもそもCではvolatile参照の意味は処理系定義だ。
参照時にlock/unlockする処理系もありうるし、volatile参照を最適化で 削除してしまう処理系もある(マニュアルに書かれている)。 Javaのvolatileはまた違う意味を持っているし。
- 821 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 19:31:21 ]
- ここ読め。
1.8 Program execution [intro.execution]
- 822 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 21:02:19 ]
- >820でFA?
- 823 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 22:17:01 ]
- >>820
volatile 参照の削除はできないだろ。
- 824 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 22:25:56 ]
- >>823
820が言うとおりvolatile参照は処理系定義。 某組み込み向けコンパイラでは、マニュアルに「sequence pointを含まない 式中のvolatile参照は削除されうる」と定義されていたりする。
- 825 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 22:47:47 ]
- >>824
それって、ふたつのシーケンスポイントの間で同じ volatile オブジェクトを複数回 参照する場合、1回にまとめられることがある、ってことだよね?
- 826 名前:デフォルトの名無しさん mailto:sage [2006/08/05(土) 23:07:40 ]
- >>825
yes
- 827 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 10:53:58 ]
- sequence pointウンヌンが書いてないから、
>820でFA? はありえない。>>821の示しているものには詳しく書いてある。 そこのところをそのまま理解するのがFA。
- 828 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 11:14:29 ]
- 要はvolatileでokかngかは言語及び処理系依存ってこと。
それを無視して擁護する奴も批判する奴も間違っている。
- 829 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 11:17:05 ]
- 処理系定義の範囲は?
volatile参照に対してハードディスクをフォーマットするコードを出すのもありなのか?
- 830 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 11:23:23 ]
- >>828
「volatileでokかngか」 こういういい加減な設問の立て方はやめれ
- 831 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 11:24:07 ]
- >>829
それを処理系定義動作として明記していれば、それはANSI準拠なコンパイラとして正しい。 そんなコンパイラは売れないだろうが。
- 832 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 11:30:01 ]
- じゃあvolatile参照の前後でlock/unlockするANSI Cコンパイラ作ったら売れるかな?
- 833 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 11:56:47 ]
- >>832
自分で lock/unlock すればいい。そんな奇怪な動作をするコンパイラは要らない。
- 834 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 16:58:08 ]
- じゃあvolatile参照の前後でミサイル発射するANSI Cコンパイラ作ったら売れるかな?
- 835 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 17:09:29 ]
- 自分で面白いと思って書いてるんだったら相当やばい。
- 836 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 17:11:32 ]
- >>834
自分で発射すればいい。そんな奇怪な動作をするコンパイラは要らない。
- 837 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 17:15:21 ]
- ていうかコンパイラだけでミサイル発射できるならしてみろw
- 838 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 17:23:34 ]
- はいはい
続きはここでやれな pc8.2ch.net/test/read.cgi/tech/1147746792/
- 839 名前:デフォルトの名無しさん [2006/08/09(水) 00:24:50 ]
- 突然ですが非同期をするメリットって何でしょうか?
- 840 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 00:38:57 ]
- シャンプー
- 841 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 00:51:16 ]
- いや、メリットは同期してると思うが
- 842 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 01:07:53 ]
- >>839
スレッド、プロセス、タスクはただ待たせとくには、 もったいなさ過ぎるリソースなんじゃ! スレッドプールでぐぐれ!
- 843 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 01:08:25 ]
- リンスも利いてるし?
- 844 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 07:28:17 ]
- ZPt
- 845 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 10:19:08 ]
- ちゃん・りん・しゃん、という選択肢
- 846 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 10:23:33 ]
- >>842
スレッドプールの中のスレッドはほとんど待ってるだけだぞw
- 847 名前:842 mailto:sage [2006/08/09(水) 11:11:59 ]
- >>846
プールとか書いたんは、俺なりの「サプライズ」や。 色んな意見があるのはわかっとるし、好きに言うたらええ。 俺はまた覚えたての言葉使って、レスしていくだけや。
- 848 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 11:54:36 ]
- んまあ、I/Oとか凍り付いて待ってる間に他の仕事が出来るのがメリットだわね。
多くの場合、他の仕事っていうのは、ユーザに対して「やってますよ、生きてますよ」っていう アピールをすることだったりするけどw
- 849 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 12:49:31 ]
- >>846
馬鹿?
- 850 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 13:14:16 ]
- だっておまい、単純なスレッドプールなら、
例えばプールにスレッドが10個あってタスクが2個だったら8つは待ってるだけじゃんか。 まあ、忙しさに合わせてスレッド数を適当に増減させるような実装も可能だけど。
- 851 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 13:17:55 ]
- スレッドプールの利点
・タスクが200個あるけど、同時に動くのは最大10個 ・スレッド生成が頻発な場合、生成のボトルネックを消す …
- 852 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 13:24:35 ]
- スレッド数の上限を制御したいときも使うわね
ていうかすみませんでしたよ。 軽い気持ちで書いただけなんですよごめんなさい。
- 853 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 15:55:01 ]
- 大したテクニックじゃない気がするんだが…。
- 854 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 19:20:00 ]
- 大したテクニックじゃないといけないのか?
- 855 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 20:09:24 ]
- >>850
そんなの実装に依存。 議論するだけ無駄だなw pool状態のthreadはqueueに入れないから、待つことはないって場合もあるだろうし。
|

|