- 1 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:26:16 ]
- マルチスレッドプログラミングについて語るスレ
■前スレ マルチスレッドプログラミング相談室 その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ ■過去スレ その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/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他突起する事項】
- 285 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:56:53 ]
- >>283のおバカさを示すなら>>191の方が適切だろ。
- 286 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:08:47 ]
- >>281
だったらコア数の2倍はちょっと少なくない? まあIOってもネットワークなどの場合で、 もちろん少ない投入数で帯域使いきれるような場合や 同一サーバにつなぐような場合は別だが。
- 287 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 10:26:51 ]
- Win32(笑)
- 288 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 10:28:16 ]
- ネイティブなプロセスやスレッドで並列性増やす方法は全然スケールしないから
軽量プロセス/スレッドが流行るんだろ Erlangのような言語は言語のレベルでそういうものをサポートしている 目的がI/O多重化なら昔ながらのselect系のシステムコールが使える WindowsならIOCP Javaは1.4以降でnioという形でそれをサポートしてるし Cならlighttpdで使われているlibeventのようなものがある それはそうと、Windows XPあたりだと、デフォではTCPの同時接続数が10だかに 制限されているはずだが
- 289 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:08:39 ]
- >>288
ソースは?
- 290 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:11:40 ]
- >>289
「どれ」についてのソースなのか分からんが、 最後のものについてなら、そのまんま Windows XP 同時接続数 でぐぐればいくらでも情報が手に入るだろ
- 291 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:18:08 ]
- UDPは制限あるの?
- 292 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:19:40 ]
- 知らん
UDPにはconnectionという概念がないから、多分無いんじゃないかとは思うが 自分で調べたらどうだ
- 293 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:25:13 ]
- いやです
ありがとうございました
- 294 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:40:30 ]
- ググってみたが、XPのSP2から1秒間につき10コネクションという
制限がついたらしい。 時間をあければ万単位までいけるみたいだが。
- 295 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 12:40:39 ]
- Windows XP Professional の場合、ネットワーク経由で同時に接続することができるコンピュータの最大数は 10 です。
とありますが、 メッセンジャーに繋げてますが この状態だと最大数は9になるのでしょうか?
- 296 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 13:11:01 ]
- 制限解除するパッチもあるよ。公式じゃないけど。
- 297 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 13:11:23 ]
- もう少し詳しく調べてみた。
同時最大接続数が10に制限されるのは、listenする側の制限。 ようするに自分がサーバになる場合。 外向きの接続に関する制限は、half-open connectionが 1秒間に10個までに制限されている。(SP2から) half-open connectionは相手がacceptしてない接続のこと。 外向きの接続数に関しては、能力的な限界以外に制限は無さそう。 ただし1スレッドにつき64ソケットの上限有り。(回避は可能)
- 298 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 13:13:51 ]
- >>297
え?内向きの制限はもともとサーバー系でない奴にはついていて、 XP SP2以降のは、外向きの制限だろ?
- 299 名前:298 mailto:sage [2008/12/09(火) 13:15:20 ]
- 要は、listenじゃなくて、外に貼りに行くコネクション数に制限がついたってことな
- 300 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 14:35:58 ]
- >>298-299
そういう制限は見当たらなかった。 日本語の非プログラマ系のブログでそう書いてるところはあるが、勘違いだろう。 実際にセッションモニタ見てると、10なんて余裕で超えてるし。
- 301 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 14:47:37 ]
- >>300
は? Event ID 4226でぐぐれよ 秒間の「外向きの」同時接続試行回数に関する制限で、 非公式のtcpip.sysに対するパッチも出ているから
- 302 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:00:15 ]
- P2Pとかやると直ぐでるからわかる
- 303 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:12:52 ]
- ああ、論点のずれが分かった
10個以上のTCP/IPのコネクションが維持できないって制限じゃないだろ 秒間に10個以上SYNパケット(TCPの最初のハンドシェイクで使う)を 投げないようにしているだけのはずだ 要するにスレッド沢山つくって並列でダウンロードさせようとしたところで 10個目以降ではconnect()呼んだ時点で制限にひっかかり、少なくとも他の ハンドシェイクが完了するまでは待たされるってこった
- 304 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:36:05 ]
- ちゃんと297でhalf-open connectionと書いたんだが。
それを否定されたら、同時セッション数としか読み取れないよ。
- 305 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:45:44 ]
- そうだな、よく読んでなかった
すまん
- 306 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 17:47:13 ]
- クライアントでどこまでスケールさせる気だ。
- 307 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 20:04:18 ]
- googleのクローラでね?w
- 308 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:25:35 ]
- シングルスレッドでダウンロードするとうまくいくのですが
マルチスレッドでダウンロードするとエラーが返ってきて GetLastError() で戻り値を調べても 0 で何が原因か分からないのですが どなたか分かりませんか? WinXP です
- 309 名前:308 mailto:sage [2008/12/10(水) 17:29:32 ]
- マルチスレッドといっても、デバックの為、スレッドはひとつなので
競合などはおきないように設計しているのですけど、うまくいかないのです
- 310 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:39:11 ]
- さすがにそれだけで答えろって言われても、俺には無理だな。
GetLastErrorを呼ぶスレッドは合ってるの?
- 311 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:42:36 ]
- ダウンロードはどのAPIを使っているの?
- 312 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 19:15:01 ]
- >>311
ググってもでないのよねフフフフフフフフフ
- 313 名前:308 mailto:sage [2008/12/10(水) 19:19:36 ]
- >>311
機密事項なので答えられません><
- 314 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:40:26 ]
- >>311
WinInet InternetOpen 以外のAPIだけとは言っておく
- 315 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:42:31 ]
- >>311
とあるライブラリなんです 何かはいえませんが
- 316 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:55:51 ]
- 俺は原因わかったよ
ここには書けないけど
- 317 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 21:36:55 ]
- 内々に連絡しておいた。
- 318 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:36:59 ]
- Debug版を納品とかフフフフフフフフフフフフフフフフフフフフフ
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
- 319 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:31:46 ]
- ソースも示さずデバッグ依頼とな。
- 320 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:37:51 ]
- ソース。
anchorage.2ch.net/test/read.cgi/mnewsplus/1228941968/ 残念ながらもう消えてしまったようだが。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 12:06:37 ]
- >>318
お主もなかなかのフフフフフフ でもユーザー名ばれるのよねフフフフフフフッフフフフフフッフ
- 322 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 12:29:11 ]
- 夜中にひとりでデバッグしてる時に
フフフフフフフフフフフフフフフフフフフフフフフフフ とか feeefeee feeefeee feeefeee feeefeee とか見ると鳥肌が立ちそうになる・・・
- 323 名前:デフォルトの名無しさん [2008/12/11(木) 14:11:44 ]
- POSIXスレッドでmutexロックでのデッドロックの回避法教えてください
- 324 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:27:28 ]
- 馬鹿どもにマルチスレッドを走らせるな
- 325 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:36:53 ]
- >>323
2個以上のmutexを同時にロックしないというルールを徹底させるのが一番簡単かと
- 326 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:32:14 ]
- 走る〜♪
走る〜♪ スレッドーたーちー♪
- 327 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:32:57 ]
- 馬鹿ですいません><
- 328 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:58:59 ]
- _beginthread( multi, 0, data );
>はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜
- 329 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 18:46:03 ]
- APIの問題ではなかったようだ
設計の問題だったようだ これは普通気づかない
- 330 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:45:05 ]
- Critical!
Criticalなのぉ〜 Criticalな処理をしていなかったのぉ〜 んぼおおおおおおおおおおおおおおおお
- 331 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 04:49:09 ]
- 馬鹿はマルチスレッドやっちゃだめだよ。
死んだじっちゃんの口癖だった。 馬鹿って言うのは思考力が著しく劣る人なんだけど、 具体的に例をあげれば、自分で調べて答えを見つけられない人の事なんだ。
- 332 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 07:20:42 ]
- だ〜か〜らぁ〜
ぐぐってもgooで聞いてもダメなのぉぉぉぉ〜〜〜〜
- 333 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 11:05:47 ]
- デッドロック 予防 とか、デッドロック 回避 とかで検索して、端から見ていってみ。
- 334 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 13:36:29 ]
- 1スレッド
2スレッド 3スレッド 4スレッド 5スレッド 全部ためしたののですが1スレッドが一番早かったです どうしてでしょうか?
- 335 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:23:51 ]
- よくあることです。
- 336 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:40:12 ]
- 何を試したんだよ
- 337 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 17:25:44 ]
- キアイ
- 338 名前:デフォルトの名無しさん [2008/12/13(土) 19:48:33 ]
- あるスレッドで処理した結果をメインスレッドに渡したいのだがどうすればいい?
_beginthreadexの第3引数に結果用のポインタを渡せばいいのか
- 339 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 20:43:24 ]
- 典型的にはソウデスナ
処理してほしい内容と 処理結果の格納場所を 与えるのがよろしいかと思いますダ
- 340 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:39:30 ]
- >>338
CPUにお祈りする
- 341 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 02:58:11 ]
- >>334
マルチスレッド化して速くなるかどうかは状況による。 その状況がわからなきゃ、何とも言えない。
- 342 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 07:49:17 ]
- >>338
グローバル変数でいいよ メモリ空間を共有してるのがスレッドのメリットなんだし
- 343 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 09:18:38 ]
- …
- 344 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 11:09:40 ]
- volatile最強
- 345 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 11:13:32 ]
- >>388
俺はそういう場合スレッドセーフなスマートポインタ使うな スレッドにデータを渡す前に参照カウント増やしといて スレッド側では使い終わったら解放 メインスレッドは結果が必要なくなればスレッドが終了していなくてもデータを解放できる
- 346 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 11:22:01 ]
- クラスにしてthis渡してるな
class tiny_thread abstract { protected: HANDLE m_hthread; unsigned m_id; : いろいろメンバー private: static unsigned WINAPI thread_start(void *o) { tiny_thread *tt = (tiny_thread *) o; return tt->run(); } public: bool start() { m_hthread = (HANDLE) _beginthreadex(NULL, 0, thread_start, this, 0, &m_id); return m_hthread != 0; } virtual int run() = 0; };
- 347 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 15:41:15 ]
- >>388は素人童貞
- 348 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 15:56:58 ]
- >>388 に期待
- 349 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:34:39 ]
- ・メインスレッドが必ずサブスレッドより長生きするようにする。
メインがサブをjoinなり必要に応じて中断するなりする。 ・結果格納場所のポインタやコールバック関数のアドレスをサブに渡す。 メインがUIスレッドの場合、サブからPostThreadMessageした方が楽かも知れない ・通信用メモリの解放責任をメイン側と決めておく >>345みたいなサブスレッドだけ生き続ける設計は個人的に(GCの無い言語では)嫌だ これらが難しいと思うなら>>342だね。カッコ悪いけど確実かな
- 350 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:53:27 ]
- PostThreadMessageは取りこぼしが発生するので使っちゃいけません。
PostMessageを代わりに使おう。
- 351 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 00:19:42 ]
- ところで、ファイバーってどうなん。
アイドル状態のスレッドでパカパカやって動かすとか スケジュール処理なワーカスレッド代わりとかしか思い浮かばん。 漏れは、スレッドの処理は概ね、待ち処理とか先行処理なので、 あまり使い方が思い浮かばない。
- 352 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 01:51:56 ]
- >>351
ファイバーは移植のためにあるようなもので 新規プロジェクトで使う価値は無に等しい。
- 353 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:10:30 ]
- >>352
短絡杉 プリエンプティブであることは必ずしも望ましいことじゃない。 ゲームではファイバーが好まれる。 Larrabeeでもシェーダはファイバーで実装されるそうだ。 マルチコアでハイパフォーマンスだすためにファイーバーは重要。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:31:59 ]
- 自分でコンテキストスイッチとかめんどくせぇぇぇ
- 355 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 03:01:53 ]
- ちまちま排他処理すんのめんどくせぇぇぇ
- 356 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 12:21:50 ]
- >>352、353
マルチスレッドで複数の関数叩くのと、ファイバーを複数キックするのの違いってやっぱ、 同期処理が不必要(他のスレッドでキック中のファイバーは自動的に同期される?)だとか スタックの制限(ファイバーキックされた段階でスタック指定できる)ですか? いえ、無論色んな意味合いで違うことは判るけど。
- 357 名前:デフォルトの名無しさん [2008/12/20(土) 16:20:24 ]
- int result = write( buf, size );
if( result == -1 && errno == EAGAIN ) SwitchNextCoroutine(); I/Oイベントドリブンなスケジューラをみたことある。↑みたいなの。 あとは同期が要らないってのが素晴らしい。
- 358 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:34:51 ]
- VisualStudio 2010にはC#のyieldを使ったファイバーもどきライブラリが付いてくるらしいね
channel9.msdn.com/posts/Charles/George-Chrysanthakopoulos-CCR-and-DSS-Visual-Toolkit-2008/
- 359 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 23:50:27 ]
- それは歪でいまいちだね〜
まずコルーチンがあって それにスケジューラを足してファイバー イテレータ風に味付けしてジェネレータ(C#のyieldのことね) という階層があるべき姿だと思うな。
- 360 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:18:47 ]
- 64CPU環境でスレッドを256本生成したときに
struct data[2000]; なんてあって、dataの個々の要素を排他的にアクセスしたい場合 pthread_mutex以外に使えそうな手段ってありますか? CASってどうやって使うのかよくわからんし助けて
- 361 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:48:43 ]
- pthread_mutexでマズい理由は?
- 362 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:58:20 ]
- >>361
2000個もpthread_mutex_tって用意して使えるのですかね?
- 363 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:08:25 ]
- 発想が変?
- 364 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:47:06 ]
- mutexを2000個作って問題ないと思うよ。
自分だったら、struct data[200] 全体に対して1個のmutexにして、それ でパフォーマンスの問題が出たらそのときに対処を考える。 reader-writerロックが使えれば使う。
- 365 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:47:49 ]
- 訂正。
> 自分だったら、struct data[200] 全体に対して1個のmutexにして、それ struct data[2000] ね。
- 366 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 18:28:23 ]
- >>362
pthread_mutex_t はただのデータだから、何個作っても そのプロセスのメモリ以外の資源は使わない
- 367 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:54:05 ]
- 連結リストをCAS使って実装するときのお手本ってありますか?
- 368 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:04:19 ]
- >>367
ttp://www.cs.rochester.edu/u/michael/PODC96.html
- 369 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:14:01 ]
- 双方向は無いのか........................
- 370 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:50:26 ]
- 双方向でできると思ってんのかっ
- 371 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:40:02 ]
- rw_lockAPIが存在する環境で
同じrw_lock変数を以下のような構造で使うのって 問題ないでしょうか。 func() { rw_lock(read) if 条件{ rw_lock(write) rw_unlock(write) } rw_unlock(read) }
- 372 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 02:34:03 ]
- オレオレOSのオレオレrw_lock APIなら大丈夫だけど?
- 373 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 13:24:35 ]
- 実装次第だが、普通に考えるとデッドロックするな
- 374 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:32:54 ]
- r_lock 確保してるんだから if の中の w_lock が取れないだろjk
- 375 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 06:28:27 ]
- なぜrでロックしないといけないのかわからんけど、条件に関わるのか?
- 376 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 11:21:30 ]
- >>375
このパターン自体は典型的なケースだろ APIによっては、ReaderとWriterの他に「Writerに変更可能なReader」が用意されていることもある
- 377 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:00:09 ]
- WindowsでCreateThread中Cランタイムに含まれる関数を使うとリークを起こすとありますが、
普段からCreateThreadは使わずbeginthreadを使ったほうがいいんですか? 完全にCランタイム使わずってのも面倒だし、内部で使ってる関数があるかもしれない そういうことまで考えてあえてCreateThreadを使うメリットはあるのでしょうか?
- 378 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:06:34 ]
- 軽い
- 379 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:14:38 ]
- ない
- 380 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 17:56:15 ]
- _beginthreadexでおk
- 381 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 14:15:26 ]
- ないな
- 382 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:59:30 ]
- pthreadでmutexで
再起ロックする場合と 依存関係をハッキリさせてスレッドIDとFAST_MUTEXで判別 どっちが高速ですか?
- 383 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:33:29 ]
- 後者。
以前計測したことがある。 ただし、依存関係の洗い出し作業がとても大変だった。 デッドロックに直結するから、とても気をつけないといけない。 要求性能がシビアだったから後者で仕事のためにやったけど、趣味ならば前者をお薦めする。 排他制御がボトルネックになるようなら、前者で実装すればいい。 俺の場合は、本当に特殊で制限が厳しかったから前者でやっただけ。
- 384 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:35:13 ]
- ×排他制御がボトルネックになるようなら、前者で実装すればいい。
○排他制御がボトルネックになってから、後者で実装すればいい。
- 385 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:38:02 ]
- FAST_MUTEXって何?
|

|