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


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

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



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】

【言語】

【実行環境】

【その他突起する事項】

266 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 01:48:56 ]
ワロタ


267 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 09:39:27 ]
WindowsとかLinuxとか・・・
そんな貧乏臭いOSの話ばっかでワロタ

268 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 10:27:54 ]
そうですか

269 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 13:48:37 ]
アセンブラ級はついていけn

270 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 18:58:28 ]
何十万ものスレッドをサポートするようなシステムもあるんだよね?

どういう構造になってんだろ
根本的に考え方からちがうのかな?


271 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 19:01:51 ]
>>270
カーネルスレッドは使わない(ユーザスレッドでやる)、か、そういうスレッドを
サポートしたカーネルでないと無理。普通のUnixの普通のカーネル(含むLinux)
とかだと無理。

272 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 21:55:16 ]
OSはWindowsXPなんですよ
で、ソースですが
for( int i=0; i<2000; i++ )
{
  _beginthred( DoIt, 0, NULL );
}

void DoIt( void * )
{
  DownloadURL( URL, filename );
  _endthread();
}
ってな感じですけど
ほとんど同時時間にスレッドを起動させてるのですが、
タイムスライスが各スレッドに割り当てられないのでしょうかね?

それともやっぱり >>232 さんの言っているように
サーバー側が延滞処理をほどこしているんでしょうかね?

問い合わせたくてもあまり進んで聞けるようなことではないので

273 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 22:05:16 ]
>272
スタック用の仮想メモリが足りなくなってない?

あるいは、その呼んでいるDownloadURLが
STAみたいな実装とかw


>261
IOが支配的なスレッドで、タイムスライスの意味なんか
ほとんどないとおもうけど。

274 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 22:48:50 ]
同一サーバにHTTPコネクションを2000張ろうとしていたオチと予想



275 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 23:28:21 ]
Irvineとかで試してみればどうかな

276 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 23:41:31 ]
>>274
攻撃とみなされても仕方ありませんな

277 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 00:06:27 ]
>>273
仮想メモリなのに足りなくなるとは、これいかに。

278 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 00:15:39 ]
2000個のスレッドでスタックだけで仮想メモリ使い切るだろWin32なら。


279 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 00:20:56 ]
いくらIOバウンドだって普通2000はやりすぎ。
普通はせいぜい100までだろう、CPU数にもよるがそれでも多いくらいだろう。
だいたい2000個の各ファイルのサイズはどのくらいで、
単体での転送速度はどのくらいなんだ。

ってダウンロードが2個までしか同時に動いてなかったりしてなw

あとサーバ側も普通は当然そんなに同時処理できない
キューに入って順番に処理されるだけ。


280 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:06:30 ]
>>278
> 2000個のスレッドでスタックだけで仮想メモリ使い切るだろWin32なら。

相変わらず意味不明。

281 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:07:09 ]
俺がワーカスレッドをプールする場合は、
特に深く考えずに単にコア数の倍だけ用意しとく。
IOブロックで動けるようになった他のスレッドもIOでブロックされるだけだしね。

282 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:23:17 ]
>277,280
正確には仮想メモリ空間。
Win32では、ふつー、プロセス毎に、ユーザ空間として
使用可能なのは、下位から7fffffffあたりまでで、2GB。
だいたい、ポインタが32bitであることの限界とみていい。

で、Win32のスレッドは、1つあたり、規定では1MBの
スタックを仮想メモリ空間に確保する。他にもDLLとかの
コード領域も同じ2GBの空間を使うわけで。

283 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:35:04 ]
>>282
仮想メモリというのはプロセス毎にあってだな・・・

284 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 01:47:50 ]
>>283
>237嫁



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 はただのデータだから、何個作っても
そのプロセスのメモリ以外の資源は使わない






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

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

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