我使用和
创建了两个线程static int counter (global variable) ;
-(void)ViewDidLoad {
[NSThread detachNewThreadSelector:@selector(handleTread:) toTarget:self withObject:nil];
[NSThread detachNewThreadSelector:@selector(handleTread:) toTarget:self withObject:nil];
}
和选择器方法是
-(void)handleTread:(NSThread*)sender {
counter =0; // Position-1
while (counter<9) {
counter =0; // Position-2
counter++;
}
NSLog(@"Counter=%d",counter);
}
因此,如果我在位置-1使用计数器,则将结果打印为counter = 9。但我把它放在位置-2它不打印? 我已经更新了这个问题。
答案 0 :(得分:2)
您的代码中有2个严重错误:
您有两个执行线程来操纵同一个全局变量。一个线程将践踏另一个线程使用的变量。例如,线程#1可能能够counter
到1
,然后线程#2会再次将其重置为0
。确切的行为是未定义的。
你有一个无限循环(你在counter = 0
语句中分配while
),即使代码是在一个线程中执行它永远不会完成。
从根本上说,您的代码已被破坏,我不确定是否可以对此进行更多说明。
答案 1 :(得分:0)
如果在while循环中设置计数器,它将导致无限循环,永远不会到达NSLog。将你的柜台保持在第1位。