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

2012/06/15(金) 01:31:57.88
マルチスレッドプログラミングについて語るスレ

■前スレ
マルチスレッドプログラミング相談室 その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】
【言語】
【実行環境】
【その他特記する事項】
2013/02/27(水) 23:21:29.29
RafterWってシングルスレッドなら絶対安全?
途中で実行cpuが変わってもosが面倒見てくれるから気にする必要はないってこと?
実行cpuが変わることあるかしらないけど

まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か
2013/03/02(土) 16:47:32.29
>>147
> まぁ普通にコード書いてて入れ替わる訳ないから大丈夫か

普通に入れ替わるだろ。
切替前に読み込んだ情報は、違う CPU でもちゃんと復帰するから
問題ないはず。
2013/03/03(日) 20:26:49.52
>>148
書き方が悪かった。

マルチプロセッサの環境でシングルスレッドのコードを実行してて、
実行CPUが変わったとしても読み書き順が入れ替わらないでしょう?

そこはOSがプロセス切り替え時に勝手にバリアをかけてるはずだよね?ってこと
2013/03/03(日) 20:30:18.24
>>149
ああそういうことか、それは大丈夫だと思うよ。
2013/03/03(日) 22:58:29.83
バーリアー!平気だもーん!
2013/03/04(月) 01:43:54.42
MemoryBarrier()の実装ってx86では単なるxchgなのな。
なんでmfence使ってないのだろう?速度では大差ないってことなのかな。

MemoryBarrier macro (Windows)
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684208

↓はC++11のスレッドライブラリ作った作者の本らしいんだが、pdfで全部公開されてる。
ありがたいのでだけどメモリフェンスは std::memory_order_acquire みたいな一般命令で
隠すようなコードしか書いてない。

C++ Concurrency in Action: Practical Multithreading
http://www.amazon.co.jp/dp/1933988770/
2013/03/04(月) 09:03:05.32
マルチコアでないマルチプロセッサ構成で、
外部キャッシュや主記憶のシステムコントローラが、
CPU本体より弱いメモリモデルを採用してる場合に意味を持ってくる。
Windowsではこうゆうハードウェア構成は想定してないはず。
2013/03/04(月) 10:40:54.32
>>153
違うよ。全然違うよ。
とりあえず、これでもじっくり読め。
msdn.microsoft.com/ja-jp/magazine/jj883956.aspx
2013/03/04(月) 11:45:37.38
ところでmfenceは何でSSE2の制御命令に分類されてるの?
2013/03/04(月) 23:37:29.77
>>152
MemoryBarrier()はx64でもsfence/mfence使ってないな。
やっぱり処理速度の関係だろうか。
まるでenter命令並みに使えない。

x86
0000b 87 04 24 xchg DWORD PTR _Barrier$66624[esp+4], eax
x64
0003a f0 83 0c 24 00 lock or DWORD PTR [rsp], 0
2013/03/11(月) 14:35:12.41
>>155
xFENCE命令はMOVNTPS, MOVNTPD,などのNon Temporal転送命令向けの機能で、
この系統の命令だけx86のメモリモデルに従わないので専用のFENCE命令が必要となった。
このうちLFENCEとMFENCEは普通のx86命令にも効果があるが、
パフォーマンスがxchgに劣る。
2013/03/11(月) 15:38:43.70
なんでxchgがバリアとして使えるの?
2013/03/11(月) 17:50:17.45
メモリに対するxchgは自動的にlockを伴う
160片山博文MZパンク ◆0lBZNi.Q7evd
垢版 |
2013/06/18(火) 23:59:01.86
確率的にいつ終わるかわからない時間の掛かる処理をマルチスレッドを使って複数同時に
実行させると、シングルスレッドよりも早い時間で終わる確率が高くなると思うが、これについて貴様らはどう思う?
2013/06/19(水) 00:04:03.77
ちなみにクロスワード自動作成ソフトを作ってますっ
2013/06/19(水) 01:02:30.98
辞書ひく時間が糞長いから、マルチスレッドやっても大して変わらない
2013/06/19(水) 06:32:32.99
>クロスワード自動作成ソフト

どこらへんを並列化できるのん?
2013/06/19(水) 09:30:45.19
バックトラック乱れ打ちじゃねーの
165デフォルトの名無しさん
垢版 |
2013/06/20(木) 07:49:26.95
同じレスを各板に乱れ撃ちする作業だろ?
2013/06/20(木) 15:25:09.57
マルチスレッドにしたら5〜8時間に1回エラーが出るようになった。でもデバックできないよorz
2013/06/20(木) 20:17:10.50
つログ
2013/06/20(木) 22:19:34.34
同期もわかってないのにマルチスレッドにするからだ。
2013/06/20(木) 22:26:19.30
同期とったら並列の意味がなくなりそうでためらうときがあるな
待ち合わせキューにするくらいなら順番に処理した方がましな気がする
2013/06/21(金) 00:07:54.88
つスーパースカラー
2013/06/21(金) 00:28:22.79
粒度変えりゃいいじゃん
172デフォルトの名無しさん
垢版 |
2013/06/21(金) 04:34:35.98
マルチスレッドって自作できるんですか?
以前nyの書籍を読んだときに、開発者の人がマルチスレッドを自作したと書いてたような気がするのですが
C言語でも自作できるんですか?
2013/06/21(金) 04:48:19.55
マルチスレッド・マルチタスクで動いているように見せることは出来る。

並列動作させたい複数の処理を細切れにしてちょっとづつ実行して
グルグル回す。
2013/06/21(金) 15:03:05.45
>>173
タイムシェアリングみたいにやるってことですか
2013/06/21(金) 19:27:29.84
>>174
俺が>>173で書いたのは、タイムシェアリングではなく
ノンプリエンプティブ・マルチタスク。
例えば無限ループ内に3処理 A, B, C があったとして
それらをマルチで実行したければ、それぞれを
A1, A2, A3
B1, B2, B3
C1, C2, C3
などと細切れに分割し、
A1, B1, C1, A2, B2, C2, A3, B3, C3, A1, ……(無限ループ)
と実行する。

いまでも、組み込みでコントローラやセンサーを制御する小さなCPUは
マルチタスクの能力を持っていないのが当たり前のようにあり、
これでマルチ動作させるのに当たり前のように使われる手法。
176デフォルトの名無しさん
垢版 |
2013/06/21(金) 19:38:33.60
スレち
2013/06/21(金) 19:52:56.34
スレチというほどじゃないんじゃない?

OSレベルでスレッドのサポートが無い場合は、
言語ランタイムレベルのグリーンスレッド
タイマー等の割り込みの利用
メッセージポンプのループ利用
NT Fiber

スレッドはないけどプロセスのマルチが出来るなら、
パイプなどでプロセス間通信の利用
といったところかな
2013/06/21(金) 20:25:17.31
俺もスレチじゃないと思う
2013/06/21(金) 20:31:18.12
windows 3.1 を思い出すな
2013/06/21(金) 20:41:54.83
ファイバーってレアすぎ
2013/06/21(金) 22:30:00.37
>>175
win31 のことね
2013/06/21(金) 22:38:33.58
気が早いな
まだ8だぞ
2013/06/21(金) 23:18:56.88
2000があるのに…

>>175をタイムシェアリングだと思ってたな。もう少し勉強しよう。
2013/06/21(金) 23:38:19.83
ファイアー少なくてレアすぎ
2013/06/21(金) 23:40:35.43
広義だと含むのとちゃうかな
おさ〜ん的にはTSS(TSO)のホスト端末を思い浮かべるけど
2013/06/23(日) 12:58:55.01
ファイバー使ってみたけど、
フェーズとswitchより
シンプルに書けたよ。
2013/11/22(金) 08:18:08.42
C/C++ で勉強したいのですが、おすすめの書籍などありますか?
もしくは一から学べるようなWebページがあれば教えてください
188デフォルトの名無しさん
垢版 |
2013/11/22(金) 09:05:54.07
D の方が良いよ
2013/11/22(金) 13:04:58.77
猫でもわかる
2013/11/23(土) 05:39:10.02
>>188
D のほうが書きやすい?触れたことないのでわからんです
>>189
猫でもわかる は、Web版が俺にはちょっと分かりづらかった記憶が
書籍だとそうでもないのかな

C++のBoostを利用したThreadプログラミングの解説ページがあったので今はそれ見てます
2013/11/23(土) 09:00:39.63
>>190
触ってもいいお
2013/11/23(土) 13:19:59.45
>>191
どれどれ
193デフォルトの名無しさん
垢版 |
2013/11/23(土) 13:24:53.59
>>191
ペロペロ
194デフォルトの名無しさん
垢版 |
2014/02/23(日) 09:00:04.29
マルチスレッドって自力だとどうやって書くの?
2014/02/23(日) 09:43:27.54
pthread_create()
2014/02/23(日) 10:15:16.84
>>194
std::thread th{
 []{std::this_thread::sleep_for(std::chrono::milliseconds(3000));}
};
std::printf("うんこ\n");
th.join();
197デフォルトの名無しさん
垢版 |
2014/02/24(月) 17:57:18.01
例の金子がny作るときにマルチスレッドは自作したんじゃなかったっけ?
2014/02/24(月) 18:45:47.70
なんとかしてこれを読むと良い
ttp://ci.nii.ac.jp/naid/40000002652
2014/02/25(火) 00:18:34.64
>>197
あれ、シングルスレッドだよ。
Windows3.1みたいな方法で複数のタスク回してる。
2014/02/25(火) 06:43:17.74
小学生がBASICで弾の連射実装してるレベルだろ。
2014/02/25(火) 12:01:20.77
グリーンスレッドとは違うの?
2014/02/25(火) 17:16:14.73
グリーンスレッドなんて初耳。wikip見たらなんかトンデモな説明なんだが。
これは誰が言い出したんだ? バズワードくさい。
2014/02/25(火) 17:27:19.90
レッドスレッド、ブルースレッドはあるのでしょうか?
2014/02/25(火) 17:28:25.61
OSが関与しないスレッドの実装のこと。ウィキペディアの記述がタコってるのはいつものこと。

基本的な理屈はそう難しくないけど、実際にはreadとかでどれかのスレッドがプロセスごと
ブロックされると、他に走りたいスレッドが居ても走れなくなっちゃうので、そのへんを
どう手当てするかがカギ(そういった所だけOSが支援するとか、ブロックする可能性がある
システムコールに関連するものは全てスレッドライブラリが面倒を見るとか)。
2014/02/25(火) 17:33:10.94
よく分らんな。スレッドってそもそもOSが定義したものだろう。
アプリ側がたかが永続性のあるサブルーチン程度のものを
勝手にグリーンススレッドって呼んでるだけじゃないのか?

まさしく小学生がBASICで弾の連射実装してるレベルの話。ガッカリ度120%。
2014/02/25(火) 18:01:22.88
ユーザースレッド、ユーザ空間でか、なるほど
カーネルスレッド、カーネル空間でか、なるほど
グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん。それこそ>>203
2014/02/25(火) 18:14:03.00
ttp://dl.acm.org/citation.cfm?id=603551
↑これが「小学生がBASICで弾の連射実装してるレベルの話」に見えるのか。
さぞかしスーパープログラマ(笑)様なんだろうな。
2014/02/25(火) 18:19:01.04
その例え話しとその提示したのと繋がりそしてなんでその皮肉になるのか、200文字以内で説明しなさい
2014/02/25(火) 18:49:55.40
wikipediaのスレッドの項目の所まで加筆してやがるww
バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw

そんなのスレッドと何の関係もないのにスレッド言うなや。
2014/02/25(火) 19:49:47.38
結局、逆の意味でのウィキペディア馬鹿か。
一人で言ってろw
2014/02/26(水) 05:28:26.83
グリーンCPU。
グリーンプロセス。
グリーンヒープメモリ。
グリーンスタックメモリ。
グリーン仮想メモリ。
グリーン物理メモリ。
グリーンマルチタスク。
グリーンネットワーク。
グリーンアップル。

おれもいっぱい考えました。
2014/02/26(水) 08:36:42.11
グリーンPC
グリーンディスプレイ

が抜けている
2014/02/26(水) 08:51:32.57
ソイレント
2014/02/26(水) 13:23:35.72
MZ-80Kの話をしてるのかと思ったぜ
2014/02/26(水) 14:34:56.07
>>214
そりゃMZ80Cだ!
MZ80Kはモノクロだ!
2014/02/26(水) 17:24:33.12
> ユーザースレッド、ユーザ空間でか、なるほど
> カーネルスレッド、カーネル空間でか、なるほど
> グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん

ユーザースレッドとカーネルスレッドという言葉はそれぞれ、
M:Nスレッドモデルとかの議論で、カーネル空間のコードの実行におけるスレッドと、
ユーザー空間のコードの実行におけるスレッド、という意味で使われる。

グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した
スレッドAPIの実装を指す。

以上のことが何も理解できないバカには、なにもかもがバズワードに見える。
2014/02/26(水) 17:25:22.57
バカですがなにか?
2014/02/26(水) 17:49:55.02
命名の由来のことなのに、Wikipediaから意訳したようなのを偉そうにのたまう、他人を馬鹿呼ばわりする自称天才様w
天才過ぎてどれもこれも バズワード 扱いしていると思い込んでいるようだしなあ。御愁傷様でw
2014/02/26(水) 18:13:53.06
> バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw
>
> そんなのスレッドと何の関係もないのにスレッド言うなや。

この威勢はどこ行ったのかなぁw
2014/02/26(水) 18:31:45.02
>グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した
>スレッドAPIの実装を指す。

ハナからスレッドの定義に当てはまらないのにスレッド言われもなぁ。

WEB2.0と変わらんレベルの造語。
どうせまたジョブスオタクの低脳営業SEが言い出したんだろう。
2014/02/26(水) 18:36:03.83
スレッドの定義ってなんだ?
2014/02/26(水) 18:38:20.17
コイツの脳内ではシステムコールで実装されたものだけがスレッド、という定義なんだろう。
聞くだけ無駄だよ。
2014/02/26(水) 18:43:07.52
>>221
OSが管理する最小の実行スタック。
2014/02/26(水) 18:44:25.59
>>222
ではキミのスレッドの定義は?
2014/02/26(水) 19:01:36.43
222じゃないけど、スレッドっていうのはプログラムを実行する最小単位のことでいいんじゃないかな
OSが管理しているかどうかは問わない

スレッドっていう概念が実装されてるプログラミング言語が多いと思うんだけど、
この場合のスレッドはOS上の実装とは切り離されてるんだよね
例えばJavaのThreadクラスとか

OSが管理するものだけをスレッドと定義するとしたら、上記のようなプログラミング言語で
抽象的に実装されてるスレッドはスレッドとは呼ぶべきじゃないということかな?
2014/02/26(水) 19:17:09.57
実行スタックってなんだ、って思ったらウィキペディア(英語版含む)でそんな表現を使ってるのか。

一応GNU AWKと、.NETかCOMに、execution stackという用語はあるようだが。
2014/02/26(水) 20:45:20.03
>>225
そんなトンデモ言われてるも議論する気にもならん。
じゃあ、関数もスレッドなんですね。

もうアホかと。しかもJavaの〜とかふざけてるとしか。
228デフォルトの名無しさん
垢版 |
2014/02/26(水) 21:45:14.58
ワロタw
2014/02/26(水) 21:46:50.48
中途半端に脳内完結してるんだろな
2014/02/26(水) 21:49:16.49
グリーンスレッド言ってた >>222 が定義を言わず逃げちゃった。

グリーンラナウェイ。
2014/02/26(水) 22:31:24.56
ファイバー、タスク、ユーザーレベルスレッドと呼ばれ方はあるが
スクリプト言語のスレッドやゲームのタスクシステムの実装などに使われているありふれたテクニックだろ
OSの実装も同じだよ、ただカーネルレベルでやってるからCPUの特権命令が使えたりするってだけ
もしやOSを書いたことも言語処理系を書いたこともないのか?
2014/02/26(水) 22:43:21.83
意味負
2014/02/27(木) 06:36:49.81
>>227
JavaのThreadクラスの何処がふざけてるんだ?
2014/02/27(木) 07:43:24.03
>>231
さっさとおまえの定義を言えよ、低脳。
2014/02/27(木) 07:47:45.64
もはや人格攻撃しかできないモードに縮退したか。
2014/02/27(木) 07:49:46.46
POSIXのスレッドAPIを実装したものがスレッド、という定義でいいだろ。
2014/02/27(木) 07:54:15.34
トンデモグリーンスレッド連呼してたのにそのスレッドの定義聞いたら答えないで
逃げ回ってるんだからもはや人格の問題でしかない。

クズである。
2014/02/27(木) 08:07:04.32
おまえが自分の定義と違うものに聞く耳を持たないクズってだけじゃないか。

自分がクズだろ。
2014/02/27(木) 08:56:57.51
>>237
自己紹介乙、でどうでしょう
2014/02/27(木) 09:11:19.33
>>238
その定義ってどれ?w いいかげにんしろよ、クズ。
2014/02/27(木) 10:03:13.14
いい加減スレチ
2014/02/27(木) 12:12:54.02
グリーンスレッドはどう考えてもスレッドじゃないからな。
スレチ。
2014/02/27(木) 12:47:18.23
コンテキストの切り替えが出来るならスレッドの範疇でいいとちゃうの
LWTやFiberも範囲でいいだろ
2014/02/27(木) 15:48:00.75
Java屋は馬鹿だからな。なに言っても無駄。
2014/02/27(木) 17:43:54.80
馬鹿でわるかったなー
2014/02/27(木) 18:44:32.81
キチガイに触るな
居座っちゃうだろ
247デフォルトの名無しさん
垢版 |
2014/02/28(金) 03:22:01.11
マルチスレッドとタイムシェアリングは違うの?
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。