Ios Obj-C如何为C++;多线程环境中的单线程? 在我的应用程序中,网络请求密钥交换是用C++编写的,在XCODE项目中是由库链接的。它不是线程安全的,这意味着如果两个线程同时加密或解密,则会发生意外行为。我总是这样调用它 TnKeyChangeInstance::instance()->encrypt(inStr, outStr); >代码>同步只适用于 NSbObjs/Cux>类型对象,如何添加C++代码的锁,作为上述单件?有什么想法吗?

Ios Obj-C如何为C++;多线程环境中的单线程? 在我的应用程序中,网络请求密钥交换是用C++编写的,在XCODE项目中是由库链接的。它不是线程安全的,这意味着如果两个线程同时加密或解密,则会发生意外行为。我总是这样调用它 TnKeyChangeInstance::instance()->encrypt(inStr, outStr); >代码>同步只适用于 NSbObjs/Cux>类型对象,如何添加C++代码的锁,作为上述单件?有什么想法吗?,ios,multithreading,locking,Ios,Multithreading,Locking,你可以使用: 最后一个方法是修改你的单点C++实现,并添加一个:ST::MuteX::锁定< /代码>,以使它线程安全。在本例中,您将修改所有单例方法,以添加对它们的mutex.lock()/mutex.unlock()调用。如果单例实现不太复杂,那么这种方法可能是最好的,如果您在从现有实现派生的类中进行线程安全更改,则更好 @interface MyClassUsingTnKeyChangeInstance : ... { NSRecursiveLock *lock; } @end @

你可以使用:

最后一个方法是修改你的单点C++实现,并添加一个<代码>:ST::MuteX::锁定< /代码>,以使它线程安全。在本例中,您将修改所有单例方法,以添加对它们的

mutex.lock()/mutex.unlock()
调用。如果单例实现不太复杂,那么这种方法可能是最好的,如果您在从现有实现派生的类中进行线程安全更改,则更好

@interface MyClassUsingTnKeyChangeInstance : ... { 
  NSRecursiveLock *lock;
}
@end

@implementation MySafeMutableArray


<instantiate the lock in your init method>

- (void)lockedOp:(id)obj {
   [self.lock lock];
   <access singleton>
   [self.lock unlock];
}

@end
- (void)serializeOp:(id)obj {
    dispatch_sync(self.serialQueue, ^{ <access singleton> });
}