NSTimer
バックグラウンド スレッドでソケットを介してパケットを頻繁に送信するようにスケジュールされている単純なシナリオがあります。ただし、私のメインスレッドは、タイマーとソケットを破棄する責任があります。
破壊は次のようになります。
if (self.connected) {
[self.pingTimer invalidate];
if (self.socket != -1) {
close(self.socket);
self.socket = -1;
}
self.connected = NO;
}
Objective-C で、コードのこのセクションが入力されると、コード セクションが終了するまでスケジューラがこのスレッドを中断できないようにするにはどうすればよいですか? つまり、このコード セクションをアトミックにしたいのです。
私の理解では、@synchronized
ディレクティブは高レベルのセマフォ/ミューテックスであるため、そのコード ブロックのアトミック性を確保するには、コード ブロック自体とself.connected
、self.pingTimer
およびディレクティブself.socket
を参照するすべてのコードを囲む必要があります。@synchronized
私はこれを考えるのが正しいですか?