- 1 名前:デフォルトの名無しさん mailto:sage [05/01/29 16:18:12 ]
- ほんとプログラマにとってはMacって
本当に興味が無いOSだよねw Macでの標準的な言語であるObjective Cのスレすら無いし。 過去にはあったんだろうけど。
- 403 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 03:09:51 ]
- >>401
girlfriend を autorelease して渡す 奇特な友人は居ないと思われ...
- 404 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 10:46:54 ]
- retainして他に渡すのも変じゃないか?
- 405 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 19:06:40 ]
- >>403
ちょっと彼女に会わせてあげる、みたいなノリじゃね?
- 406 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:52:00 ]
- myGirlfriend = [[myFriend girlFriend] retain];
[myFriend release]; myFriend = nil;
- 407 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 21:14:14 ]
- /* myFriendの復讐 */
- (nil)release { [>>406 dealloc]; [super release]; }
- 408 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 05:32:07 ]
- girlFriend: が nil を返さない保証はどこにあるのさ?
- 409 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 00:41:33 ]
- メソッドそのものが無かったりして…
- 410 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 18:51:45 ]
- ないものは作る
@implementation girlFriend 後はまかせた
- 411 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 19:28:07 ]
- いや、girlFriendはインスタンス変数だと思うが。
クラスはGirlですか
- 412 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 19:38:36 ]
- @implementation Human (GirlFriendInformalProtocol)
- 413 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:09:57 ]
- - (id)initWithBoyFriend:(Human *)aBoyFriend
{ self = [super init]; if(!self) return nil; if( [aBoyFriend height] < 170.0 ) return nil; boyFriend = [aBoyFriend retain]; return self; }
- 414 名前:デフォルトの名無しさん [2006/03/09(木) 20:17:14 ]
- はじめてCocoaでSocketのプログラムを書いてみました
asyncSocket smallsocket 等ライブラリがあるようですが、どれを使っても同じ問題が発生しています 問題 Javaで書かれたサーバーに接続し、Objective-Cクライアント側のsocketとstreamをcloseしてもサーバー側では分からないのです。 他の言語でクライアント側を書いた時は、クライアント側でcloseすると、サーバー側で検知されました。 これってOSXでは通常の動作でしょうか?どのようにしたら、サーバー側で検知できるでしょうか。 サーバー側のsocketに何かプログラムが必要でしょうか。 現在は、javaサーバー側のsocketでタイムアウトが発生するまで検知されません。 どなたか教えて頂けませんか。
- 415 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 22:36:32 ]
- いわゆるひとつのマルチってやつですか
- 416 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 11:06:52 ]
- そもそも、クライアント側のクローズをサーバで検出する事が間違い。
LANの外に出るとほとんど機能しない。 クライアントが先に送信バイト数を送るか、最後に終了コードを送って、サーバ側に切断させるのが正解。 またサーバ側は、タイムアウトでも切断するようにする。
- 417 名前:デフォルトの名無しさん [2006/03/10(金) 13:01:38 ]
- 最後に終了コードを送るようにしていますが
closeが検出されないことが驚きでした このような動作は Objective-C+OSX だけではないでしょうか Realbasicでも検出されました javaやWINDOWS環境でも検出されます 何か間違っているでしょうか
- 418 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 17:15:46 ]
- 何で通信してるか知らないけど、明示的にclose送ってみたら?
その後閉じる。
- 419 名前:デフォルトの名無しさん [2006/03/10(金) 17:31:33 ]
- 終了コードを送る場合 文字コードとかあるじゃないですか
なので とりあえず close だけで 閉じても サーバー側ではわからないのですね 正常にクライアントソケットを閉じてるのですからサーバーソケット側で 他の言語環境と同じように検知したいのですが こういう動作はObjective-C+OSXが初めてです なぜ検知をしたいかというと不正なクライアントを識別する機能と関係しています もし検知されないとしたら Objective-C+OSX のクライアントから 適当なサーバーに繰り返し接続して 放置しておくだけで DoS攻撃ができちゃいますよ
- 420 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 19:18:15 ]
- 言語のせいなのか?
- 421 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 19:25:46 ]
- ほほうCocoaアプリのWebブラウザは全てDoS攻撃可能ですか
帰れ馬鹿。
- 422 名前:デフォルトの名無しさん [2006/03/10(金) 19:45:48 ]
- だれも CocoaアプリのWebブラウザ全て なんて言っていませんよ
これからもずっと狭い世界で生きていってください
- 423 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 20:02:22 ]
- Objective-C+OSXのクライアント、なんて書くからだろ。そんなの山ほどあるよ。
そしてキミのトラブルwに類似した例で困ってる人なんか、ググっても誰も見つからなかったんだろ? そこで気付くべきだ。狭い世界で生きてるのは自分だとなw
- 424 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 20:07:46 ]
- DoSの対処は、同一ホスト接続時ウェイトや最大接続数でやるものだ。
だいたいソケットのcloseは、ルータを跨ぐと伝わらないからインターネットでは使えない。 それに、終了コードで文字コードとかって何の話だ。 telnetで試せないような物を作っている気配がするぞ。 コマンドストリームなら英文字列のコマンドを送る物だし、データストリームは先にバイト数を通知する物だ。 まずネットワークプログラムの本で、定石なプロトコルの作り方を勉強した方が早いと思うぞ。 あとうまくいかない時は、まっさきに自分の不勉強を疑え。 そんな弱い心だと、腕が上がらんぞ。
- 425 名前:デフォルトの名無しさん [2006/03/10(金) 20:44:56 ]
- コメントありがとう
>ソケットのcloseは、ルータを跨ぐと伝わらない Objective-C+OSX 以外は伝わりますよ java RealBasic その他ウィンドウズの環境でも
- 426 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 21:17:32 ]
- プロトコルによる。
- 427 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 21:58:46 ]
- >>419
>終了コードを送る場合 文字コードとかあるじゃないですか 意味わかんね。自分の中で話閉じるな。
- 428 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 22:00:48 ]
- >>419
>なぜ検知をしたいかというと不正なクライアントを識別する機能と関係しています だったら、なぜサーバからクローズしない。
- 429 名前:デフォルトの名無しさん [2006/03/10(金) 22:35:41 ]
- 終了コード云々はプロトコルの問題です 文字コード云々もプロトコルに含まれます
socketのcloseとdisconnectの仕様についてが元々の質問です Objective-C+OSX 以外のsocketの仕様については一部述べています その上でObjective-C+OSXのsocketの仕様についてお尋ねしているのです 問題を切り分けた上で質問しているということです。 >だったら、なぜサーバからクローズしない。 httpのように直ぐ切断するものでなくて 接続が続くタイプのサーバーだからです
- 430 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 22:40:42 ]
- だったら、ふつうにサーバに切断要求を出せばいい
プロトコルも当然自分で規定してるんだろう? 切断用のコマンドなりなんなり決めればいいじゃないか
- 431 名前:デフォルトの名無しさん [2006/03/10(金) 22:50:12 ]
- 切断用のコマンドも決めていますよ
ただsocketの段階で他の環境と動作が異なっているので 質問しました プロトコルがテキストベースの場合CRLFなどを読むコードを書かないとsocketの切断処理を書けない のであれば 特殊だと思いましたので 間違っているのかどうか確認したかったのです とりあえず動かすということでなくて 問題を切り分けした上で プロトコル関係なく OSXのsocketの動作として どうなのかが質問のポイントです
- 432 名前:デフォルトの名無しさん [2006/03/10(金) 22:52:55 ]
- 誤:プロトコルがテキストベースの場合CRLFなどを読むコードを書かないとsocketの切断処理を書けない
のであれば 正:プロトコルについて いろいろ決めて そのコードを書かないとsocketの切断処理を書けない のであれば
- 433 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 22:58:21 ]
- TCP socketと自分プロトコルのクローズを混同してる。
RealBasic, Java, Windows環境でも検出されるというが、 言語環境とOS環境も混同してる。 当然、UNIX Cの socketでも確認したんだよな?
- 434 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 23:06:26 ]
- なあ、とりあえずObjective-C関係なくないか?
ネットワークプログラミングのスレとかに移動してもらえると助かるのだが。
- 435 名前:デフォルトの名無しさん [2006/03/10(金) 23:06:35 ]
- 混同なんてしていません
あなたが勝手に間違っているだけとしか 思えませんが UNIX C の socket とは何ですか? なぜ そんなもので確認する必要があるのですか?
- 436 名前:デフォルトの名無しさん [2006/03/10(金) 23:07:04 ]
- UNIX Cの socketだけ まだです
と言ってもObjective-Cから中で呼び出しているようですが 今度確認してみます Windowsの言語と言っても沢山ありますから ウィンドウズ環境とまとめただけです TCP socketのクローズについて聞いているのですが プロトコルのクローズについての返答が多いです
- 437 名前:デフォルトの名無しさん [2006/03/10(金) 23:09:58 ]
- 偽者行為して何になる>435
こういうやつが多いのですか マカーは
- 438 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 23:17:50 ]
- なんでマカーという単語が出てくるんだ。
- 439 名前:デフォルトの名無しさん [2006/03/10(金) 23:22:39 ]
- 新マックの方にも書いたのですが
質問の意味が直ぐわかる方が半分ぐらい うざがってか なんでか からむ人が半分ぐらい という感じだったからです
- 440 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 00:16:27 ]
- socketをクローズした時に、TCP FINが飛ばないって話ですか。
単にライブラリの誤用だと思いますけど。 ライブラリは止めて、NSStreamかCFStreamを直接使ってみたらどうです?
- 441 名前:デフォルトの名無しさん [2006/03/11(土) 00:38:06 ]
- ありがとうございます
ライブラリといってもソースを読みましたが単純なものでしたが できるだけ低レベルAPIでやってみます
- 442 名前:440 mailto:sage [2006/03/11(土) 01:08:38 ]
- プロトコルで皆に突かれている事も妥当なので、再考した方が良いですよ。
クライアントが終了コマンドを送ってそのままクローズすると、コマンドが届かなかったりします。 切断は、終了コマンドを受け取ったサーバ側が行う事が定石です。
- 443 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 01:10:20 ]
- いつまでもサーバが待ってる方が変だと思う
- 444 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 01:32:31 ]
- 日本語は空白じゃなくて「、」で区切るんだよ。
- 445 名前:デフォルトの名無しさん [2006/03/11(土) 05:51:19 ]
- 基本的に切断はサーバ側で行っていますが
Objective-C+OSXのsocketでcloseを検知しませんでしたので質問しました 予期しないクライアントの接続方法についてサーバー側では常に定石外のことも考えるべきだと思います 。を使わない時は、も使いません いつも使わないわけではありません 失礼しました
- 446 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 14:40:01 ]
- OS X のソケットといっても BSD と異なるとは思えないけれど。
- 447 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 00:36:57 ]
- さて、Objective-Cの話に戻ろうか
- 448 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 21:03:39 ]
- -- I'm going down to the local autorelease pool for a quick swim, anyone care to join?
-- not me. you never know what's been released in there..
- 449 名前:デフォルトの名無しさん mailto:sage [2006/03/17(金) 08:03:12 ]
- -- 近所の autorelease プールにちょっと泳ぎに行こうと思うんだけど、誰か一緒に行かない?
-- 僕は遠慮しとくよ。 何がリリースされてるか判らないからね。
- 450 名前:http://www.vector.co.jp/soft/win95/util/se072729.html mailto:http://msdn2.microsoft.com/ja-jp/library/h2k70f3s.aspx [2006/03/18(土) 21:30:52 ]
- TextSS のWindowsXP(Professional)64bit化おながいします
もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
- 451 名前:デフォルトの名無しさん mailto:sage [2006/03/25(土) 23:22:17 ]
- [self hosyu];
- 452 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 10:25:14 ]
- ∧||∧
( ⌒ ヽ MonaOSにlibobjc移植してみたけどコンパイルできない・・・ ∪ 。ノ ∪∪
- 453 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 11:45:35 ]
- MonaOSってObjective-Cで書かれてんの?
- 454 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 12:43:09 ]
- >>453
C++とかC#とかぐちゃぐちゃだよ 単にObjective-Cが使いたかっただけなんだ
- 455 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 18:55:29 ]
- Objective-C良いよね。
- 456 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 19:10:57 ]
- だよね。
- 457 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 00:51:28 ]
- [[NXApp alloc] init] とか見ると快感すら覚える。
- 458 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 20:49:22 ]
- [[Object alloc] init] と [Object new] はどうちがいますか?
- 459 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 09:50:39 ]
- >>Object<<
どっちも使えねぇという意味で違わない
- 460 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 19:29:03 ]
- NXApp ってあんた何年前の話よ。
alloc] init] と new ] の違いは、 後者は普通使わなくて前者をよく使うというだけでは、慣習的に。
- 461 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 01:58:47 ]
- 俺の人生はNeXT Computer Inc.が消滅した時に終わったから...
- 462 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 10:24:39 ]
- すろやまさん?
- 463 名前:デフォルトの名無しさん [2006/04/02(日) 13:46:30 ]
- 荻原本復刊記念age
- 464 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 15:01:11 ]
- どう変わるかな、しかし高いので立ち読みだけにします。
- 465 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 15:14:50 ]
- 萩原盆とはなんぞや
- 466 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 16:00:49 ]
- >>462
いい読みだが、漏れはあんな負け組さんじゃない。
- 467 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 16:51:42 ]
- >>265
これだろ? 「Objective‐C―MacOS Xプログラミング入門 MacOS Xプログラミング入門」 荻原 剛志 (著) Human Interface Guidelines も復刊してくれ
- 468 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 19:09:49 ]
- >>466 人生終わってるのに勝ち組カコイイー
- 469 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 19:53:05 ]
- すろやまさん乙
- 470 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 22:32:34 ]
- よく+(id)sharedInstanceみたいな感じでインスタンスをひとつだけ作ってそれを返すメソッドがあるけど、
あれってどうやって実装してるの?
- 471 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 23:36:49 ]
- ?
単純にsingletonじゃねーの? if (_object==nil){ _object = [[Hoge alloc] init]; } return _object; Hoge alloc, Hoge initは非公開にしてこんなかんじ? もうちょっといろいろしてると思うけど #そういう話じゃない?
- 472 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 00:26:41 ]
- ttp://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_10.html
- 473 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 09:31:45 ]
- Javaじゃあるまいし、initを非公開になんてしないんじゃね?
普通にinitでもファイルスタティックな変数に入れた共有インスタンスを返せばいい。
- 474 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 13:10:45 ]
- Amazon登場
Objective-C Mac OS Xプログラミング 荻原 剛志 (著) ttp://www.amazon.co.jp/exec/obidos/ASIN/4797333340/
- 475 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 19:53:46 ]
- ありがとうございます。
Singletonっていうんですね。デザインパターンについてはあまり勉強してませんでした。
- 476 名前:デフォルトの名無しさん [2006/04/03(月) 20:27:51 ]
- >>474
前作を持っている人は購入の必要はなさそうですか?
- 477 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 03:47:17 ]
- Objective-C++ で boostって使えます?
ヘッダインクルードすると大量のエラーが出ますが やっぱりアウト?
- 478 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 06:57:20 ]
- externはしたのか。
- 479 名前:デフォルトの名無しさん mailto:sage [2006/04/08(土) 18:24:50 ]
- レビューまだー?
- 480 名前:デフォルトの名無しさん mailto:sage [2006/04/08(土) 20:34:31 ]
- せめて目次出して...
- 481 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 01:15:38 ]
- >>480
前の本との比較としては ・CHAP13「アプリケーションの構造」CHAP19「キー値コーディング」が追加。 ・CHAP11「オブジェクトのコピーと保存」にアーカイブとプロパティリストについて追加 ・第8章「例題:カードゲームのシミュレーション」が削除 という感じ。ディープすぎる内容が本文からコラムに移されていたりと 読みやすさとしても良くなってると思うよ。
- 482 名前:デフォルトの名無しさん [2006/04/09(日) 07:59:45 ]
- 前の持ってたらいらねーかなー
高いしなー
- 483 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 15:22:51 ]
- なぜか前の2冊持ってる俺
- 484 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 15:57:46 ]
- >>483
ヤフオクで高値で売ろうとしていたが、 復刊に気付かず売り抜けられなかったってこと?
- 485 名前:デフォルトの名無しさん [2006/04/11(火) 16:45:44 ]
- 萩原本買ってきた。
wktkしながら読みはじめる所。 次は、ヒレガス本のTiger版が欲しい。 つか、TigerであれだけAPIが増えたのに、それ関係の書籍が出ていないし。
- 486 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 17:21:24 ]
- 出ないだろう。Macプログラム本は基本的にはどこの出版社も
出したがらない。mixiのどこだったか忘れたけど2年がかりで Macプログラム本を書いたのにボツにされた人がいた、とか 書いてあったよ。
- 487 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 18:22:28 ]
- ヒレガスじゃないけど、Tiger本出るよ。
- 488 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 18:42:14 ]
- >>476
是非Web公開してほしいじゃないか
- 489 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 19:06:19 ]
- >>486
んなこたあない Macプログラム本は種類が少ないから結構売れる。
- 490 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 20:48:52 ]
- >>481
じゃあおまえが出版社つくって売ってやれ
- 491 名前:デフォルトの名無しさん [2006/04/14(金) 11:37:31 ]
- >>487
ソースきぼん。
- 492 名前:デフォルトの名無しさん [2006/04/14(金) 17:03:33 ]
- CHAP15の例外とエラーは、Tiger向けにかなり書き直されてる。
購入推奨。 ただし、スレッド周りダメっぽい。 volatileとメモリバリアの区別が付いていないように読める。
- 493 名前:デフォルトの名無しさん mailto:sage [2006/04/14(金) 23:25:05 ]
- >>491
本人か周りの人だろ。ローカスか広文かBNN って、全部出版社潰れたんだっけ?
- 494 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 14:31:49 ]
- volatileって、実行コードになった時、該当変数をレジスタで保持しないって指定だよね?
たしか、別タスクで書き替えられる可能性のある変数の変更がちゃんと反映されるように保障する指定
- 495 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 15:16:35 ]
- >>494
それもあるけど最適化もしない。 while (i--); なんて文は大抵最適化で消されるけど、 iがvolatileだったら消されずに実行される。
- 496 名前:デフォルトの名無しさん [2006/04/17(月) 00:03:09 ]
- それ買ってObjective-Cっての勉強しようと思ったが、
値段見て愕然とした、米買えなくなるから諦めた。
- 497 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 00:23:18 ]
- >>494
違う。最適化コードの出力を禁止するだけ。 組み込みとかでメモリにI/Oが割当たっている時に、 書き込みが省略されたりすると意味が変わってしまう時に使う。 一方ハードウェアの実行時最適化(命令の並べ替え)には影響しないので、 マルッチスレッド下での排他制御には意味を持たない。 メモリバリアとか、メモリの可視性とかを調べよう。
- 498 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 01:04:49 ]
- >>497
>>494は排他なんて言ってない。 変更が反映されると言ってるだけだから、参照だけだろ。 むしろvolatileだけで排他なんかかけたら問題だw
- 499 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 08:49:31 ]
- >>498
違う。参照も保証されない。 お前もメモリバリアを勉強し直せ。
- 500 名前:デフォルトの名無しさん [2006/04/17(月) 09:23:37 ]
- CのvolatileとJavaのvolatileが混同されているな
- 501 名前:デフォルトの名無しさん [2006/04/17(月) 12:15:16 ]
- >>499
そうね。 Cの場合は下記を参照 www.yuasa.kuis.kyoto-u.ac.jp/~yasugi/4/par.html Javaはこのあたり参照 www.netgene.co.jp/java/concurrentTips.html C/C++の場合は、volatileはスレッド間のメモリ可視制御を何もやっていないけど、 Javaについては意味がある。 現状Cocoaの場合、インラインアセンブラでメモリバリアを差し込むか、 メモリバリアを入れるOSコールを呼び出す必要がある。 Cocoaが下請けに使っているpthreadについては、「メモリ同期を行う関数」一覧があるので調べられる。 が、Cocoaのどのクラスのどのメソッドが該当するのかは、ドキュメントが見当たらないので推測になる。 念のために書いておくが、494の認識はマルチプロセッサ登場前は概ね正解だった(それでもCPUによる)。 そのため嘘を書いている本は大量に残っている。 ちゃんとした本はあまり無いが、Effective C++を書いたエロイ人のドキュメントもあるので、 英語が読める人には推奨しておく。 www.nwcpp.org/Downloads/2004/DCLP_notes.pdf
- 502 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:08:59 ]
- Objective-C の @synchronized ではいかんの?
マルチスレッド書いたことないのですいません
- 503 名前:デフォルトの名無しさん [2006/04/17(月) 17:02:49 ]
- >>502
問題無い。lock系の操作はメモリバリアが入ってる。 ダメなのは、「4バイト以下のvolatile変数を使えばロックを使わないで済む」という勘違い。 複数のスレッドが変数にアクセスする場合の選択支は二つあって、 ・常にlockして読み書きする。 ・読み書きのポイントにメモリバリアを入れる。 のどちらか。 後者の方が性能面で有利だけど、前者を使う方がミスが少ない。 @synchronizedを使うのが一番確実。 ちなみにダメな理由を大雑把に説明すると、最近のCPUはアセンブラコードの順番を勝手に入れ替えて最適化処理をやっている。 その結果、コード上とは異なる順番でメモリ上の変数が書き換わったりしている。 これは単一のCPUから見る限り問題無い(ように最適化されてる)のだけど、他のCPUで動作するスレッドから見ると不味い事になる。 例えば、カウンタとフラグに関係を持たせたりしていると、タイミング次第で誤動作してしまう。 他にもCPU単位にメモリキャッシュがあったりするので、一部の変数の書き換えだけが延々と他のCPUに見えない時もある。
|

|