gpt4 book ai didi

ios - iOS是否有“公平”的同步机制

转载 作者:行者123 更新时间:2023-12-01 19:14:13 27 4
gpt4 key购买 nike

我有一个应用程序倾向于在后台线程中执行很多数据库 Activity (下载大型数据库更新),而且这个过程经常使“UI线程”匮乏-我知道数据库是不定期发布的,但是所使用的@synchronized机制不“公平”,它允许后台线程立即重新获取该锁。

是否存在另一种可以替代地使用的机制,该机制相当有效且得到了良好支持(并且不太难进行改造)(和“公平”)?

最佳答案

我无法重现您的问题。在这里,我有一个基于@synchronized和pthreads的简单程序(尽管在Mac上运行),它清楚地表明@synchronized可以按预期工作,并假设您释放了锁:

void *backgroundThread(void *data)
{
while (true)
{
@synchronized (globalMutex)
{
usleep(USEC_PER_SEC / 3);
}
}

return NULL;
}

int main()
{
pthread_t bgThread = NULL;
globalMutex = [NSObject new];

pthread_create(&bgThread, NULL, &backgroundThread, NULL);

NSTimeInterval lastTime = [[NSDate date] timeIntervalSinceReferenceDate];
while (true)
{
@synchronized (globalMutex)
{
NSTimeInterval elapsed = [[NSDate date] timeIntervalSinceReferenceDate] - lastTime;
NSLog(@"Main Thread 'came up for air' after %lf seconds", elapsed);

lastTime += elapsed;
}
}
}

输出:

TestProj [1494:303]主线程在0.000015秒后“空出”
TestProj [1494:303]主线程在0.003136秒后“冒出空气”
TestProj [1494:303]主线程在0.000637秒后“出现空出”
TestProj [1494:303]主线程在0.000610秒后“出现空出”
TestProj [1494:303]主线程在0.000697秒后“出现空出”
TestProj [1494:303]主线程在0.000576秒后“空出”
TestProj [1494:303]主线程在0.000571秒后“出现空出”
TestProj [1494:303]主线程在0.337343秒后“空出”
0.335533秒后,TestProj [1494:303]主线程“浮空”
0.335253秒后,TestProj [1494:303]主线程“浮空”
0.335309秒后,TestProj [1494:303]主线程“浮空”
0.335367秒后,TestProj [1494:303]主线程“空出”
0.335223秒后,TestProj [1494:303]主线程“空出”
0.335754秒后,TestProj [1494:303]主线程“浮空”
0.335271秒后,TestProj [1494:303]主线程“空出”
0.335211秒后,TestProj [1494:303]主线程“浮空”
0.334555秒后,TestProj [1494:303]主线程“浮空”
0.335245秒后,TestProj [1494:303]主线程“浮空”
0.335203秒后,TestProj [1494:303]主线程“浮空”
0.335262秒后,TestProj [1494:303]主线程“浮空”
TestProj [1494:303]主线程在0.335252秒后“出现空转”
0.335667秒后,TestProj [1494:303]主线程“浮空”
0.335278秒后,TestProj [1494:303]主线程“浮空”
0.335309秒后,TestProj [1494:303]主线程“浮空”

因此,除非您没有正确释放锁,否则 @synchronized正是您在此情况下需要的。请详细说明您的同步代码的实际外观,以便我们为您提供更多帮助。

关于ios - iOS是否有“公平”的同步机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347862/

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