我有一个简单的场景,其中 aNSTimer
被安排在后台线程上以每隔一段时间通过套接字发送数据包。然而,我的主线程负责销毁计时器和套接字。
破坏看起来像这样:
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
我这样想对吗?