[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 09:53 / Filesize : 193 KB / Number-of Response : 799
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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】

【言語】

【実行環境】

【その他突起する事項】

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 ]
おトイレならわかるがご質問はないな。
「ご質問はありますか」は当然あり。

253 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:50:16 ]
尊敬と謙譲の概念しか無いようだな。



254 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:51:34 ]
板違い
よそでやれ

255 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:52:09 ]
使い方が間違っているんだよ。
それを気づくことができないのか?

256 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:54:16 ]
>>255
>>254

257 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:57:17 ]
>>254
いやいや、質問する上でのマナーの話だからここで良い
マナーを守れない方がどっか行くべき

258 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:00:35 ]
>>257
いやいや、ご質問する上でのマナーのお話だからここで良い
おマナーをお守りできない方がどっかへ行くべき


259 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:36:01 ]
いや、マナーってほどの話ではないとおもう
変な日本語を使ってるけど、意味は理解できるから問題ない

てなわけで、おスレち

260 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:41:30 ]
やっぱ誰でもアクセスできるローレベルな話のほうが伸びるなw

261 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:42:45 ]
すまんなw
おれも、なんか参加しちゃってるよw

262 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:44:37 ]
しょうがねーな
俺も参加してやろうか

263 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:46:22 ]
僕もご参加していいですか?



264 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:25:29 ]
どうぞ、ご参加ください。

265 名前:デフォルトの名無しさん [2007/10/23(火) 23:36:57 ]
珍しく盛り上がってると思ったら・・・

>>244
コード例


266 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:46:21 ]
ひさびさに来ましたよー
相変わらずスレ違いにはレス多いね。

267 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:59:52 ]
スレッドの呼び出しコストってどうやってはかるの?

組込み用でmutexとかの関数の呼び出しコスト一覧
表作り単位んだけどどうしたらいいん?

268 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 02:27:13 ]
>スレッドの呼び出しコスト
具体的にどういう意味と受け取ったらよいのだ?


269 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 02:38:38 ]
適当なタイマーで挟んではかr

270 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 08:11:41 ]
>>265
ttp://developers.sun.com/solaris/articles/stl-new.html
Standard Library, STL and Thread Safety
Atomic updates for reference counting

ttp://www.sparc.com/standards/SPARCV9.pdf
J Programming With the Memory Modelsにいろいろ
J.6 Spin Locks(Example 8―Lock and Unlock Using CAS)
J.11 Fetch_and_Add(Example 15―Fetch and Add Using CAS)
J.12 Barrier Synchronization(Example 17―Barrier Synchronization Using CAS)
J.13 Linked List Insertion and Deletion(Example 18―List Insertion and Removal)

271 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 09:27:41 ]
>>270
ktkr

272 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:14:03 ]
C++でのマルチスレッドに関する質問です
class sample{
private:
 int i;
 HANDLE hEvent;
public:
 sample(){
  hEvent = CreateEvent(NULL, TRUE, TRUE, L"sample");
 }
 ~sample(){
  CloseHandle(hEvent);
 }
 void fSetdate(int _i){
  WaitForSingleObject(hEvent, INFINITE);
  ResetEvent(hEvent);//ロック開始
  this->i = _i;
  SetEvent(hEvent);//ロック解除
 }
 int fGetdate(){
  WaitForSingleObject(hEvent, INFINITE);
  ResetEvent(hEvent);//ロック開始
  int _i = this->i;
  SetEvent(hEvent);//ロック解除
  return _i;
 }
}

273 名前:272の続き mailto:sage [2007/10/25(木) 08:17:17 ]
上記のクラスをひとつだけインスタンス化して、
複数のスレッドがそれを呼び出した場合、データの同期化は成立しますか?



274 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:08:53 ]
何が死体のこれ?


275 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:18:17 ]
別々のスレッドがfSetdateのResetEventに同時に到達した場合どうすんの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<193KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef