忍者ブログ
natsuの秘密基地です
はまり
はまり一件ごとのお話の流れです
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
プロフィール
HN:
natsu
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
ブログ内検索
アクセス解析
[36] [35] [34] [32] [29] [28] [27] [26] [25] [24] [23
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

クリティカルセクションを作る、
っていうときに、
@synchronizedはとても便利だと思う。
 
@synchronized(self)
{
for(int m=1 ; m<=5 ; m++)
{
NSLog(@"ID:%d SPEAK %d", threadID, m);
}
}
 
なんていう例は、
どこでだって見れるけども、
@synchronized(self)っていった場合、
そのメソッドがいくつかのスレッドから、
呼び出されることを想定しているんだと思う。
 
 
まあ、スレッドをつかってごにゃごにゃと、
この間からやってわけなんですが。
 
 
私のやつは、
スレッドごとにオブジェクトを一つ作成し、
そのオブジェクトに対してメッセージを送ることによって、
スレッド上の処理を動かす。
っていう感じになっているんだけども。
 
こんな動き方はすごいと思った。
あるスレッドで作ったオブジェクトは、
ほんとにそのスレッドに乗っかってるんだもの。
NSConnection経由でメッセージが送れる。
 
 
で、そんな感じのつくりだと、
@synchronized(self)
なんて無意味であることがわかる。
実際無意味だったし。
 
私のNSObjectを継承するクラスからうまれた、
かわいいインスタンスオブジェクトは
@synchronizedを意識した実装などしていないので、
この鍵はNSObjectがもっているはず。
 
なので、スレッドのファクトリで、
NSObject *lockObject
をもっておいて、
スレッドを作る際に渡しておく。
 
で、鍵をかけたいところで、
@synchronized(lockObject)
する。
 
2010-05-31 15:11:39.522 lockTest[4411:1d03] ID:0 SPEAK 1
2010-05-31 15:11:39.531 lockTest[4411:1d03] ID:0 SPEAK 2
2010-05-31 15:11:39.532 lockTest[4411:1d03] ID:0 SPEAK 3
2010-05-31 15:11:39.533 lockTest[4411:1d03] ID:0 SPEAK 4
2010-05-31 15:11:39.533 lockTest[4411:1d03] ID:0 SPEAK 5
2010-05-31 15:11:39.535 lockTest[4411:3603] ID:1 SPEAK 1
2010-05-31 15:11:39.535 lockTest[4411:3603] ID:1 SPEAK 2
2010-05-31 15:11:39.540 lockTest[4411:3603] ID:1 SPEAK 3
2010-05-31 15:11:39.540 lockTest[4411:3603] ID:1 SPEAK 4
2010-05-31 15:11:39.541 lockTest[4411:3603] ID:1 SPEAK 5
2010-05-31 15:11:39.544 lockTest[4411:3e03] ID:2 SPEAK 1
2010-05-31 15:11:39.545 lockTest[4411:3e03] ID:2 SPEAK 2
2010-05-31 15:11:39.545 lockTest[4411:3e03] ID:2 SPEAK 3
2010-05-31 15:11:39.546 lockTest[4411:3e03] ID:2 SPEAK 4
2010-05-31 15:11:39.546 lockTest[4411:3e03] ID:2 SPEAK 5
 
うん。めいめいのスレッドでちゃんと最後まで用を足す。
途中でママは呼ばない。
 
 
@synchronized。
こいつは勘なんだけども、
中の人はmutexのような気がする。
 
もし、頻繁にロック、アンロックするならば。
キューに構造体のポインタを押し込むような処理ならば、
処理自体よりロックの方が時間がかかるかもしれない。
と思った。
 
それも、たくさんの件数のデータを
押し込み、取り出しするんなら、
わりと馬鹿にならない時間がかかるかもしれない。
 
 
 
まだ試してみるべきことはある。
 
PR
この記事にコメントする
NAME:
TITLE:
color:
MAIL:
URL:
COMMENT:
PASS: Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:


Copyright (C) 2010 NEST,
All right Resieved.*Powered by ニンジャブログ *Designed by にこるん  / 忍者ブログ / [PR]