Я искал и нашел неизменяемым потокобезопасность, а mutable - нет. Это отлично. Но у меня есть вводящие в заблуждение примечания, блоги, ответы об атомном и неатомном о безопасности потоков, любезно дайте объяснение для ответа.
Предположим, что существует свойство атомной строки, называемое "имя", и если вы вызываете [self setName:@"A"]
из потока A, вызовите [self setName:@"B"]
из потока B и вызовите [self name]
из потока C, тогда вся операция в другом потоке будет выполняться серийно, что означает, что если один поток выполняет setter или getter, тогда другие потоки будут ждать. Это делает свойство "имя" безопасным для чтения/записи, но если другой поток D вызывает [name release]
одновременно, то эта операция может привести к сбою, поскольку здесь нет вызова setter/getter. Это означает, что объект безопасен для чтения/записи (ATOMIC), но не является потокобезопасным, так как другие потоки могут одновременно отправлять любые типы сообщений объекту.
Если свойство "name" было неатомным, то все потоки в приведенном выше примере - A, B, C и D будут выполняться одновременно с получением любого непредсказуемого результата. В случае атома, либо один из A, B или C будет выполняться первым, но D может выполняться параллельно.
Ваш комментарий к этому поможет нам....
И мой вопрос: ", который является потокобезопасным в cocoa, атомарном или неатомном?"