我们在某些线程中使用 coredata ......(太多并发上下文不好 - 我知道,我经历过)
现在围绕每个获取/保存核心数据包装一个锁。
我现在想测量一个线程在等待获取该锁时被阻塞所花费的时间。
我想我可以只使用时间分析器甚至线程状态仪器或采样器。但是: - 时间分析器只是忽略等待(可能是因为它不是 CPU 调用) - 采样器也是如此(即使他不在 cpu 模式下) - 线程状态仪器也没有向我显示正确的调用堆栈 :( [但也许(这总是可能性)我确实忽略了一个简单的解决方案]
在这里,我有一个非常简单的应用程序,它也有一个锁,我也无法获得等待时间......也许你可以帮助我在这个例子中获得主线程等待的时间——使用一些分析技术,我可以然后转移到coredata案例:
@implementation DDAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLock *l = [[NSLock alloc] init];
NSLog(@"made");
[NSThread detachNewThreadSelector:@selector(hogTheLog:) toTarget:self withObject:l];
NSLog(@"wait");
[l lock];
NSLog(@"got");
[l unlock];
NSLog(@"terminate");
[NSApp terminate:nil];
}
- (void)hogTheLog:(NSLock*)l {
[l lock];
sleep(3);
[l unlock];
}
@end