- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:35:32 ]
- マルチスレッドプログラミングについて語るスレ。
その1 pc3.2ch.net/tech/kako/997/997345868.html その2 pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 pc8.2ch.net/test/read.cgi/tech/1098268137/ その4 pc8.2ch.net/test/read.cgi/tech/1130984585/ その5 pc11.2ch.net/test/read.cgi/tech/1157814833/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他突起する事項】
- 152 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 01:33:10 ]
- 出力スレッドでも作って、そいつに全部押しつけろ。
- 153 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:08:32 ]
- pthreadつかってマルチスレッドのプログラム作ってるんだけど.
なぜか特定のタイミングでピタッと動かなくなる(デッドロックというのか?) それ以降プログラムがうんともすんともいわなくなる. デバッグする際にみんなどういうことやってる?gdbは使い物にならないし...ltraceも使えない... やっぱりソースコードを目で追っていってるわけ?
- 154 名前:148 [2007/09/30(日) 10:48:06 ]
- >>151-152
そんな事したらめんどくさくないですか? もうちょっと簡単な方法でお願いします
- 155 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:56:45 ]
- >>154
諦めろ
- 156 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:58:21 ]
- ソースを追うっていうか、どんなケースが起こりえて、
すべてのケースの組み合わせに対応できているか検証する。 大体は、止まりそうな場所はわかるから、そこを調べて、 次に、ブロックするかもしれない操作を洗い出して調べる。 止まる場所は突き止めたけど、どうして止まってしまうかわからない場合は、 状態をログに出したりするかな。 デッドロックより、最適化とかOoOでの実行順序の入れ替わりとか、 可視性が関わるバグの方が、調べるの大変だと思う。
- 157 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 11:12:22 ]
- coutやprintfがMT-safeでも、
出力が崩れるのはどうにもならないと思うので、 出力処理全体を1セットとして、ちゃんと排他しないと駄目だろう。
- 158 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 12:22:06 ]
- >>148
スレッドごとに出力先を分ける。
- 159 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:23:05 ]
- >>154
マルチスレッドプログラミングが「面倒くさい」ものでないならば そもそもこんなスレは存在して無いだろうよ。
- 160 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:40:06 ]
- >>154
ぐちょぐちょにならないっていうことの意味をもっとはっきりしないとだめだね 一番綺麗なのは、スレッドAの表示がすべて終わってからスレッドBの表示をすることだが、それならシングルスレッドにするのが一番簡単 つまりマルチスレッドやめれば解決
- 161 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:43:19 ]
- >>154
ドトネトのSystem.Consoleクラスならマルチスレッドセーフ。w
- 162 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:50:16 ]
- >>161
素朴な疑問なんだが、そのマルチスレッドセーフとは出力が混ざらないことまで保障してくれるのかね。 # だとしたら、逆に激しく不便なんだが。
- 163 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:03:37 ]
- >>158のは、言われてみれば当たり前なんだが、
簡単だし、間違いないな。 変数/オブジェクトの持ち回りとかが、複雑になってたら、 スレッドローカルな変数を使えばいいし。
- 164 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:04:48 ]
- メソッド一発分が安全に動くだけだろ。
- 165 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:07:48 ]
- >>162
Console.WriteLineはアトミックに実行されて出力は混ざらないね。 ReadLineは1つのスレッドが入力実行中は他はブロックされるかな? 混ざらないとどの辺りが激しく不便なのでしょうか?
- 166 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:09:34 ]
- >>164
それ以外に何を求めると?
- 167 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:12:41 ]
- 行単位でも混ざって欲しくなかったら>164では不十分だろ。
行単位で適宜出力して欲しかったら混ざらなかったら不便だろ。
- 168 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:15:25 ]
- まず、「混ざる」の定義からはじめろ。
バイト単位なのか、 マルチバイト、ワイドキャラクタ等の文字単位なのか、 出力ストリームのメソッド単位なのか、 複数の出力ストリーム書き込みをまとめた、プログラムの中で定めたオレ単位なのか。
- 169 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:19:52 ]
- 初心者なオレのためにライブラリ、クラスのスレッドセーフの
定義を騙ってください。
- 170 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:28:21 ]
- >>166
何も求めてねーよ。 >>162に答えただけだ。
- 171 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:34:16 ]
- >>170
メソッド一発分が安全に動くだけ以外のことをされると マルチスレッドでは激しく使い辛いですな。。
- 172 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 17:35:19 ]
- >マルチスレッドでは激しく使い辛いですな。
わかんねー奴に俺が翻訳してやる。 せっかく並列に動くのに余計なロックするなや 別に使い方が面倒になるわけじゃないよ いじょ
- 173 名前:148 [2007/09/30(日) 18:12:10 ]
- もういいです。わたしが馬鹿でした
もうあきらめます。
- 174 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:20:52 ]
- なんだ、学習意欲のないやつだな
- 175 名前:148 [2007/09/30(日) 19:21:43 ]
- すみませんが、本当にわかる方、回答をお願いします。
- 176 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:28:32 ]
- 残念だったね。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:36:20 ]
- 自分でマルチスレッド対応のストリームつくればいいじゃん
- 178 名前:148 mailto:sage [2007/09/30(日) 19:44:05 ]
- >>177
そんな事したらめんどくさくないですか? もうちょっと簡単な方法でお願いします
- 179 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:49:11 ]
- そもそもプログラミング自体めんどくさくないですか?
ありあわせのフリーソフト探してくる方法が簡単だと思います
- 180 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:50:56 ]
- そもそも生きてるってめんどくさくないですか?
氏ねば簡単ですよ
- 181 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:56:18 ]
- >>180
どうやったら楽に死ねますか? 簡単そうな方法にはちょっと勇気が必要だし、そうでないのは簡単じゃないし
- 182 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:09:17 ]
- >>180
旅立ちパックの中に 連単はいってるからつかえ 以上
- 183 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 22:14:37 ]
- >181
死ねばすべてが楽になるんだ 楽したいなら、死ぬ努力ぐらいはしてもいいだろ 俺は死にたくないから、努力して生きるよ
- 184 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:11:03 ]
- >>178
ストリーム出力だけロックすれば済む話だろうが〜 どこが面倒なんじゃ〜?
- 185 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 01:35:10 ]
- マルチスレッドプログラミングは初心者には無理だよ
面倒=やり方がよくわからない という事であればこの先できるようになる見込みもなし 厳しいけどこれ現実なのよね
- 186 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 03:15:20 ]
- スレッガーさん!
- 187 名前:デフォルトの名無しさん [2007/10/03(水) 20:59:05 ]
- スレッドセーフじゃない場合はどうするつもりだったのかと・・・
スレッドセーフだったらどうしたかったのかと・・・ まぁいいや、どうせネタでしょ?
- 188 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 15:51:11 ]
- 次世代ゲーム機のCPUみたいにレジスタが山ほどあるCPUて
コンテキストスイッチのオーバーヘッドも比例して増えてるんかな
- 189 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 16:02:08 ]
- 一部しか保存しなくてすむようにしてあんじゃね?IA64とかそうだべ。
- 190 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:01:20 ]
- 64bitのレジスタ32本あるのじゃまんぞくしねーのか?
- 191 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 19:38:15 ]
- 高速なキャッシュがたくさんあれば満足する
- 192 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:11:01 ]
- IA64とかって確かコンテキストが2500バイトくらいいくんだよなw
- 193 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:36:08 ]
- おれはレジスタの数よりも、1次キャッシュに乗ってるメモリとの
演算やアクセス速度が、レジスタと同程度であれば良いと思ってる。 結局それが最強でしょ?
- 194 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:04:14 ]
- 命令セットの問題じゃね
- 195 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:47:19 ]
- だよね。
RISC系の、メモリアクセスは基本的にロード/ストアのみで 演算はレジスタに対してしか出来ない、ってアーキテクチャだと キャッシュの速度だけじゃなく、レジスタの数も欲しいはず。
- 196 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:58:57 ]
- そんなことできたら苦労は無いわ。
メインメモリにレジスタと同程度でアクセスできれば最強だな。
- 197 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:43:09 ]
- >>196
補助記憶装置含めて光速の99%で処理できたらおk
- 198 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:46:35 ]
- 発想を逆にするんだ。
レジスタへのアクセスがメインメモリと同程度に遅(ry
- 199 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 13:37:41 ]
- じゃあ、みんながのんびりすればよくね?
- 200 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 18:07:14 ]
- 俺も思う。
CPUだけじゃなくて、日本人がもっとのんびりスベキナンダヨ
- 201 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:55:40 ]
- 1ヶ月くらい休みクレ!
- 202 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 23:27:18 ]
- >>>200
いや、今の状況はさー、 のんびりすべきだ、のんびりしよう、 とか言って急ブレーキ掛けてた頃からは、 実はもうだいぶ経っててさ、逆にのんびりしすぎてるんじゃ? って密かに周りが焦り始めてるんだけど、 具体的な問題が出てくるまでは、それにあえて気付かない フリをしていよう、ってところなんだよ。 ほんとうは、そろそろ歩きださないと。いそがないと! って時なんだよ? 一度怠けると元に戻れなくなるって言うけど、それ以前に 元がどうだったかなんて忘れてるもんだからさ、 フリじゃなくてほんとうに気付いてないのかもしれないね。 日本ヤバイよー。 おれは海外に移住する予定です。
- 203 名前:デフォルトの名無しさん [2007/10/21(日) 20:33:43 ]
- SolarisでpthreadでC++です。
C* c; int main() { c = new C; と、mainの先頭で生成したオブジェクトを、N個のスレッド(実際は8個固定)から使っています。 スレッドが順次終了してゆき、最後のN個目が終了した直後、あるいはN-1個目が終了した 後かつN個目が終了する直前にdelete c;をしたいのですが、うまい方法はあるでしょうか。 リファレンスカウントでしょうか。 N個のスレッドすべてをpthread_join()するような、親スレッドはいません。 なお、Cのメンバ関数はすべてスレッドセーフに作られています。 よろしくおねがいします。
- 204 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:36:29 ]
- >>203
リファレンスカウントで何か不満なの? boost::shared_ptr ですぐに実装できそうだし。
- 205 名前:203 [2007/10/21(日) 20:41:02 ]
- >>204
boostやSTLが使用禁止なので、一から手書きする場合の例をいただけたらと。。 テンプレートは使用可です。
- 206 名前:デフォルトの名無しさん [2007/10/21(日) 20:47:33 ]
- >>204
スレッドをまたいでshared_ptrを渡すのって例えばどうやるの?
- 207 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:24:12 ]
- > boostやSTLが使用禁止なので
ぬふぅ
- 208 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:24:57 ]
- >>203
代入系の演算子をoverrideしまくればそれっぽいの出来るけど、 用途をみてるとそれだけのためにshared_ptrを実装するのはもったいないな。
- 209 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:45:00 ]
- >>205
boost の実装見ればいいじゃん。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:46:15 ]
- >>206
スレッドごとに shared_ptr のコピーを持てばいい。
- 211 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:17:11 ]
- >>210
boostのshared_ptrの参照カウントの上げ下げってスレッドセーフだっけ? 最新のstableでもなにもしてなかったような。
- 212 名前:203 [2007/10/21(日) 23:58:41 ]
- みなさまどうも。
>>210 shared_ptr<C> g; int main() { g.reset(new C); // スレッドを8つ生成 cond_wait; // スレッドがgをコピーするのを待つ g.reset(0); ... } void* thr(void* data) { shared_ptr<C> local = g; cond_signal; ... } とかですか。
- 213 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 04:26:17 ]
- チラシの裏で悪いけど、g++のbits/atomicity.hの__exchange_and_add()とか使うと、
libstdc++.soの関数を呼びに行くんだね。おそそー。
- 214 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 08:13:39 ]
- >>211
スレッドセーフではないとすると、参照カウントを上げる方は、 >>212のやりかたでも、一個ずつスレッドを作って、 cond_waitすればいいけど、下げる方は排他制御しないと 駄目って事かな? 単純な実装にするなら、 全スレッドが共用するカウンタを作って、上げ下げすればいいんじゃないのか? 最初と最後だけなら、速さとかは気にせずに、適当な実装でも問題なさそうだし、 atomicな操作ができるなら、それこそカウンタだけ渡せば済むし。 Cがいじれるなら、自分自身でカウントしても良さそうだけど。 どうでもいいけど、>>212は、グローバル以外の渡し方はないのか?
- 215 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 16:47:54 ]
- >>214
void* data 経由で渡して、スレッド側でstatic_cat<shared_ptr<C*>* >することは可能。 スマートポインタへのポインタを渡すことになって気持ち悪いけど。
- 216 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:27:07 ]
- どのみちmainは生きてるんだから
mainでjoinで待って削除すればいいのでは
- 217 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:53:14 ]
- >>216
>>203 >N個のスレッドすべてをpthread_join()するような、親スレッドはいません。
- 218 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:44:40 ]
- クラスCをsingletonにするのは無し?
- 219 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:55:54 ]
- >>214
そうですね。スマートポインタは使わず、単純なカウンタ+アトミック操作でいこうとおもいます。 >>218 決してdeleteされないsingletonにするのはNGです。threadが全部いなくなったら、deleteしないとまずい 事情があります。 ありがとうございました。
- 220 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:05:42 ]
- スレッドの調停者が居ない=全てのスレッドが終了時にアプリケーションが終了
なら,singletonでも別にもんだいねーよーな気がする
- 221 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:12:26 ]
- >>220
スレッドが全部終了した段階では、アプリケーションは終了しません。 また、その段階で~C()をよばないと、いろいろまずいことがあります。
- 222 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:19:30 ]
- >>220
誰がスレッドを最終的に所有してるの?
- 223 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:22:45 ]
- 素直にスレッドのマネージャを作れば
- 224 名前:デフォルトの名無しさん [2007/10/22(月) 22:25:30 ]
- >>222
メインスレッドaを起点として、ツリー状に生成・所有されています。 a-b-c-N1 -d-N2 e-f-g-N3 -N4 -h-N5-N6 -N7 -N8 みたいなひどい感じです。Nxが、今回興味のあるスレッド群。 何でこんなことになってるのかの経緯は、私にはちょっとわかりません。。。
- 225 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:27:37 ]
- >>224
こんなはちゃめちゃになるんだったら マネージャ作れよ GCとかみたいに自分で管理したくないものは 誰か権限のあるやつだけに委譲しろよ
- 226 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:28:56 ]
- >>225
managerとは、具体的には何をするものでしょうか?
- 227 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:38:42 ]
- スレッドのリソースの管理
- 228 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:06:01 ]
- >>227
ありがとうございます。 >>214 参照カウントは、www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2167.pdf あたりを参考にすればいいのかな。 4-8個程度はCPUの乗ったSPARCが相手だと、atomic_inc/decだけでは実装できないよね。このあたりに詳しいかた、コメント いただけませんか?
- 229 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:11:23 ]
- >>228
アトミックなカウンタ操作があっても実装できない理由って何?
- 230 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:11:56 ]
- アトミック云々以前にスレッドの管理が出来てないんじゃ意味ないだろ
- 231 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:15:43 ]
- >>229
複数のCPUが同時にatomic_incを実行すると破綻するから
- 232 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:18:14 ]
- そんなのはアトミックじゃねぇ
- 233 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:19:53 ]
- >>231
その atomic_inc はアトミックじゃないのかい?
- 234 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:26:06 ]
- っSMP
- 235 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:27:42 ]
- >>232-233
そういうCPUもあるし、そうでないCPUもある。
- 236 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:35:39 ]
- そうでないCPUでは、それはただの x++ とどう違うの?
- 237 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:47:52 ]
- >>236
横から。わたしもよくわかってないが 1.コンパイラやlibcが提供するatomic_inc/dec関数だけでは、単一CPUでのアトミックな演算しか保証されない 2.適切な命令(バリア)と一緒に使えば、複数のCPUを相手にatomicなinc/decができる (memory visibilityがどーたら) 3.どういうバリアが必要かは場合によって異なるから、コンパイラやlibcが提供するatomic_inc/dec関数にはバリアが入っていないことがある こんなところじゃない?詳しい人フォローよろ。
- 238 名前:237 mailto:sage [2007/10/22(月) 23:52:39 ]
- >>237
1と2の末尾にも「ことがある」を追加
- 239 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:24:36 ]
- あー、そういう実装の既存の関数があるのね。
そこまで分かってるなら前後にメモリバリア足せばおしまいじゃね?
- 240 名前:デフォルトの名無しさん [2007/10/23(火) 00:29:35 ]
- つーかvolatileで十分w
- 241 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:30:04 ]
- atomic_inc/readはlinuxのカーネル系の関数のようだね。
pthreadのような高位のAPIを使わない理由はなんだろう? パフォーマンスを気にするようなアプリなのか。
- 242 名前:203 mailto:sage [2007/10/23(火) 00:31:23 ]
- >>241
pthreadにします。
- 243 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:00:33 ]
- >>240
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
- 244 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:41:51 ]
- SPARCv9なら、CASがあるよ。
- 245 名前:デフォルトの名無しさん mailto:sageない [2007/10/23(火) 17:58:33 ]
- linuxのCでスレッドの排他制御をしたいのですが、
なにぶんPONIX?っていうんですか?での開発は初めてなので ご質問させてください。 pthread_mutex_t mutex; pthread_mutex_init( &mutex, NULL ); pthread_mutex_lock( &mutex ); pthread_mutex_unlock( &mutex ); PONIXではこのようにpthread_mutex_lockを使うようですが この引数pthread_mutex_t*をWin32のCreateThread()のように ある共通の識別子を持っているスレッド同士のみが排他制御を するにはどのようにすればよいのでしょうか? 例えば同じ親から4つ子のスレッドが生まれたとします。 スレッド長男と次男は排他関係 スレッド長女と次女も排他関係 でもスレッド男兄弟とスレッド女姉妹は排他関係ではない という場合です。
- 246 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 18:11:09 ]
- 必要なだけ mutex を作って、自分で識別子と mutex の対応付けを管理する
- 247 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:33:13 ]
- >>246 ありがとう。
- 248 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:15:18 ]
- 自分でご質問とか言うなよ
- 249 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:29:36 ]
- なぜ?
- 250 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:40:30 ]
- 自分がする質問だから
「あなたのご質問には答えられません」 なら、相手を持ち上げている 「私のご質問に答えてください」 なら、自分を持ち上げている 日本人として変であることに気づくべき
- 251 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:42:00 ]
- あほか
美化語を知らんのか
- 252 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:47:44 ]
- おトイレならわかるがご質問はないな。
「ご質問はありますか」は当然あり。
|

|