gpt4 book ai didi

iphone - NSLog如何解决优化bug?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:44 24 4
gpt4 key购买 nike

我的应用程序通过 NSOperationQueue 创建辅助线程。在主线程中,它将消息写入全局变量缓冲区。在辅助线程中,它等待直到带有换行符的消息到达。它在没有优化选项的情况下运行良好。如果我使用任何优化选项 (-O1 ~ -Os) 进行编译,它会停留在 while 循环中。但是,如果我在循环中编写 NSLog,它就可以工作。这是什么问题?有没有更好的方法可以在不使用 NSLog 的情况下解决这个问题?

while (!strchr(buffer, '\n')) {
NSLog(@"!"); // without this, in optimized mode, it stays in while loop.
}

最佳答案

您的缓冲区可能是not declared volatile .编译器可以假定没有其他人更改 buffer,并将循环变为:

char* res = strchr(buffer, '\n');
while (!res) {}

这可能是一个无限循环。

对于 NSLog,编译器无法假定 NSLog 不会与全局变量混淆,因此不会排除条件。


如果你想等待另一个线程准备好,请至少使用条件变量(NSCondition)而不是无限循环。或者重新构建代码库以使用 GCD .

关于iphone - NSLog如何解决优化bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8450963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com