Java 用objective c实现螺纹锁紧
我正在用最新的SDK开发iOS5及以上版本 我必须在Objective C中实现一个带有Java 用objective c实现螺纹锁紧,java,objective-c,multithreading,locking,Java,Objective C,Multithreading,Locking,我正在用最新的SDK开发iOS5及以上版本 我必须在Objective C中实现一个带有线程锁的同步方法 这是我必须做的Java版本: public abstract class MyClass { [ ... ] private static Object dataLock = new Object(); public static long dataId = 0; [ ... ] public static void PostData(byt
线程锁的同步方法
这是我必须做的Java版本:
public abstract class MyClass
{
[ ... ]
private static Object dataLock = new Object();
public static long dataId = 0;
[ ... ]
public static void PostData(byte[] data)
{
synchronized (MyClass.getDataLock())
{
dataId++;
MyClass.getDataLock().notify();
}
}
public static byte[] GetData()
{
synchronized (MyClass.getDataLock())
{
try
{
MyClass.getDataLock().wait();
}
catch (InterruptedException ex)
{}
return MyClass.getData();
}
}
[ ... ]
}
如何在目标C中实现数据锁
?作为NSObject
?
如何在Objective C中执行PostData
和GetData
方法?您可以使用@synchronized(dataLock){…code here…},但这不是所描述的最快的方法。您可以使用@synchronized(dataLock){…code here…}但这不是所描述的最快的方法。使用NSCondition
类。例如:
static NSCondition* g_dataLock = nil;
...
+ (void)initialize
{
if (self == [MyClass class])
{
g_dataLock = [NSCondition new];
}
}
+ (void)postData:(NSData*)data
{
[g_dataLock lock];
dataId++;
[g_dataLock signal];
[g_dataLock unlock];
}
+ (NSData*)getData
{
NSData* data = nil;
[g_dataLock lock];
[g_dataLock wait];
data = ...
[g_dataLock unlock];
return data;
}
有关更多信息,请参阅 使用NSCondition
类。例如:
static NSCondition* g_dataLock = nil;
...
+ (void)initialize
{
if (self == [MyClass class])
{
g_dataLock = [NSCondition new];
}
}
+ (void)postData:(NSData*)data
{
[g_dataLock lock];
dataId++;
[g_dataLock signal];
[g_dataLock unlock];
}
+ (NSData*)getData
{
NSData* data = nil;
[g_dataLock lock];
[g_dataLock wait];
data = ...
[g_dataLock unlock];
return data;
}
有关更多信息,请参阅 谢谢你的回答。如何在目标C中实现dataLock
?作为一个NSObject
?您可以在.m文件的顶部添加类似static const NSString*syncString=@“Synchronize”的内容,并在其上进行同步,或者只在自身上进行同步。类中可能不需要有dataLock对象,这只是一段代码。在MyClass
上有六个或七个锁。谢谢你的回答。谢谢你的回答。如何在目标C中实现dataLock
?作为一个NSObject
?您可以在.m文件的顶部添加类似static const NSString*syncString=@“Synchronize”的内容,并在其上进行同步,或者只在自身上进行同步。类中可能不需要有dataLock对象,这只是一段代码。在MyClass
上有六个或七个锁。谢谢你的回答。谢谢投票结束,不要说为什么。谢谢投票结束,不要说为什么。非常感谢你的回答。在您的回答中,您添加了此方法+(void)initialize
,但是,它是否与抽象类
兼容?我知道Objective C
没有abstract
类,但我想尝试在Objective C上创建类似的东西。@VansFannel由于您的Java代码使用静态方法,所以我在示例中使用了Obj-C类方法+initialize是一个类方法,在第一次使用类之前,每个类只调用一次。该方法通常用于执行任何类级初始化,如示例中的数据锁。因此,如果我使用+initialize
我不需要使用类方法,不是吗?谢谢。这只是一种可以用来初始化全局数据的方法。非常感谢您的回答。在您的回答中,您添加了此方法+(void)initialize
,但是,它是否与抽象类
兼容?我知道Objective C
没有abstract
类,但我想尝试在Objective C上创建类似的东西。@VansFannel由于您的Java代码使用静态方法,所以我在示例中使用了Obj-C类方法+initialize是一个类方法,在第一次使用类之前,每个类只调用一次。该方法通常用于执行任何类级初始化,如示例中的数据锁。因此,如果我使用+initialize
我不需要使用类方法,不是吗?谢谢。这只是一种可以用来初始化全局数据的方法。