作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
来自 Java 我正在尝试学习 Objective-C 中的线程安全。到目前为止,我已经了解了这一点
我的问题是:其中之一是否暗示其他一个或多个?如果我想要这三种方法,我是否需要使用所有三种技术?
例子:
volatile int first = 0;
volatile int second = 0;
[...]
@synchronized {
OSMemoryBarrier();
first++;
OSMemoryBarrier();
second++;
OSMemoryBarrier();
}
在 Java 中,在进入和离开同步块(synchronized block)时以及在读取或写入 volatile 变量时,这三者都会得到保证。真的吗?
最佳答案
@synchronized 指令被转换如下......
- (NSString *)myString {
@synchronized(self) {
return [[myString retain] autorelease];
}
}
变成...
- (NSString *)myString {
NSString *retval = nil;
pthread_mutex_t *self_mutex = LOOK_UP_MUTEX(self);
pthread_mutex_lock(self_mutex);
retval = [[myString retain] autorelease];
pthread_mutex_unlock(self_mutex);
return retval;
}
关于objective-c - 一起使用@synchronized、volatile 和 OSMemoryBarrier()。一个暗示另一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889655/
来自 Java 我正在尝试学习 Objective-C 中的线程安全。到目前为止,我已经了解了这一点 @synchronized block 防止并发访问同一代码块 volatile 变量确保跨线程变
我是一名优秀的程序员,十分优秀!