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> });
}