gpt4 book ai didi

objective-c - 一起使用@synchronized、volatile 和 OSMemoryBarrier()。一个暗示另一个吗?

转载 作者:太空狗 更新时间:2023-10-30 03:33:13 24 4
gpt4 key购买 nike

来自 Java 我正在尝试学习 Objective-C 中的线程安全。到目前为止,我已经了解了这一点

  • @synchronized block 防止并发访问同一代码块
  • volatile 变量确保跨线程变化的可见性
  • OSMemoryBarrier();确保正确的访问顺序

我的问题是:其中之一是否暗示其他一个或多个?如果我想要这三种方法,我是否需要使用所有三种技术?

例子:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com