static pthread_mutex_t gLock; //global
pthread_mutex_init(&gLock,NULL); //in init
pthread_mutex_lock(&gLock);
for(int i=0;i<[message count];i++)
CFSetAddValue(mSet, [message objectAtIndex:i]);
pthread_mutex_unlock(&gLock);
我的可可应用程序使用 pthread_mutex_t 进入无响应模式。
@synchronized(mSet)
{
for(int i=0;i<[message count];i++)
CFSetAddValue(mSet, [message objectAtIndex:i]);
}
我的应用程序与同步块一起正常工作。
Why?
您将全局锁(所有实例一个锁)与对象级递归锁(每个实例一个锁,可以从同一线程获取多次)进行比较。它们通常不能互换——它们的操作和保护彼此非常不同。
好消息是,您可以使用pthread_mutex_t
作为递归锁,每个实例都是唯一的,以达到与以下相同程度的保护@synchronized
. Using pthread_mutex_t
也使得锁的获取变得非常非常快。
为了达到同样的效果@synchronized
使用 pthread 互斥锁,声明pthread_mutex_t gLock
作为实例变量,然后将其初始化为递归互斥体-init
。最后,销毁互斥体-dealloc
.
当然,如果子类和基类依赖于以下语义,则它们可能需要访问此锁:@synchronized
通过对象层次结构做正确的事情。
@synchronized
与递归 pthread 互斥体(我上次检查过)相比,速度非常慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)