如何在iOS应用中实现互斥锁

3

可能是重复问题:
GCD:如何从两个线程中写入和读取变量

我正在开发一个 iOS 应用程序,其中使用了 SQLite 数据库。我需要执行多线程操作,但在 SQLite 数据库上一次只能执行一个任务。因此,我需要实现信号量的概念。请帮助我。


你能详细说明你的问题吗? 你想要做什么? - Deepak
你好像忘了提问。为什么不使用NSLock呢? - David Schwartz
我想问如何同步数据库操作? - vdwivedi
上面链接的问题有一些处理这种情况的方法,我个人偏爱使用串行GCD队列来处理像这样涉及共享资源的任何事情。 - Brad Larson
2个回答

4
你可以使用@synchronized来作为互斥锁,如果你将所有用于操作SQLite数据库的方法都放置在一个由单例创建并在整个项目中共享的数据管理器中,那么你可以使用该对象作为锁标记,例如:
- (void)myMethod:(id)globalDataManager {
    @synchronized(globalDataManager) {
        // Everything between the braces is protected by the @synchronized directive.
    }
}

在数据管理器中,您可以使用@synchronized(self)来提供相同的保护。

所以您只需要一个互斥锁,不必担心实现信号量的额外代码。


0
我需要实现信号量的概念。
信号量的实现可以在#include <sys/semaphore.h>中找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接