Contents

조회 수 3000 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Objective-C에서 사용하는 프로퍼티(@property)는 알고보면 엄청나게 중요하더라. 이 프로퍼티를 선언할 때 속성을 지정하는데, 그 중에 nonatomic 이라고 거의 대부분의 객체 타입의 프로퍼티에는 명시해주는데, 이에 대해서 속시원히 설명해주는 글을 찾기가 힘들었다. 물론 멀티스레드 처리에서 해당 값을 안전하게 접근할 수 있도록 해주는 내용이고, 그게 별로 필요가 없으니 보통은 명시적으로 nonatomic으로 쓴다고는 하지만… 암튼 나름대로의 설명은 아래와 같다(…고 본다.)

OS나 프로그래밍에서 ‘atomic’이라는 말은 ‘중단되지 않는다’는 의미를 가진다. 즉 atomic한 함수는 그 전체가 실행되는 동안 중단되거나 CPU에 의해 스와핑되지 않는다. 무슨 말인고 하니, CPU는 한 번에 한 가지 일만 처리하는데, 많은 OS에서는 멀티스레딩을 지원한다. 이는 ‘시분할’이라는 기술에 의해서 아주 짧은 시간동안 운영체제가 각기 다른 프로세스에게 번갈아가면서 CPU의 사용 권한을 허락하기 때문이다. 워낙의 짧은 단위로 시간을 쪼개어 사용하기 때문에 사람이 인지하기에는 여러 가지 프로세스가 동시에 일을 처리하는 것 처럼 보일 뿐이다. (사실상 멀티 스레드는 일종의 잔상을 이용한 환영과 같은 술수이다.)

이를 위해 CPU 스케줄러는 어떤 프로세스의 동작 중에 이를 중지하고 다른 프로세스에게 CPU 사용 권한을 넘기는 것이 가능하다. (또 이렇게 하고 있다.) 따라서 두 개의 프로세스가 동시에 참조하는 변수를 업데이트하는 동작을 수행하기 위해서는 이 과정이 ‘atomic’하게 처리되어야 한다.

Objective-C에서 어떤 프로퍼티를 두 개의 스레드가 참조하고 있는 상황에서 이 프로퍼티의 접근자 메서드가 atomic 하지 않다면 한쪽에서는 A라는 값을 B라는 값으로 변경했는데, 다른 쪽에서는 그 때 새로 업데이트된 B라는값이 아닌 A라는 값으로 읽어가게 되는 문제가 생길 수 있다. 혹은 A값을 읽어야 하는데 읽는 중간에 B값으로 변경되어 문제가 발생할 수도 있을 것이다.

이런 경우에는 해당 프로퍼티를 atomic으로 설정해야 한다. 하지만 atomic으로 설정된 프로퍼티의 setter/getter 메서드는 lock을 사용하여 다중 스레드에 대해 안전하게 처리가되는데, 이 경우는 일반적인 경우에는 고려할 필요가 없으며 성능을 저하시킬 수 있으므로 대부분의 프로퍼티 선언에서는 명시적으로 nonatomic으로 선언한다. (Objective-C에서는 atomic이 디폴트로 설정된다.)

[출처] http://soooprmx.com/wp/archives/2169

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1173 Develop '2014 모바일 개발 트렌드' 발표자료입니다. file hooni 2014.10.02 980
1172 System/OS Apache CORS 설정 1 hooni 2020.09.04 2713
1171 Develop Aspect Oriented Programming in Objective-C hooni 2015.05.18 674
1170 System/OS asx미디어 정보 기록.. hooni 2003.04.23 20533
1169 System/OS CentOS 6.5 USB 설치 6 file hooni 2013.12.18 37676
1168 System/OS CentOS 에서 Cacti 설치하기 hooni 2015.01.02 1764
1167 System/OS Configure Postfix to Use Gmail SMTP on Ubuntu 18.04 file hooni 2020.02.07 1250
1166 Develop DDay Memo 1.9.4 소스코드 secret hooni 2015.10.03 0
1165 Etc EBS [수학영역] 미적분과 통계 기본 - 정규분포의 의미와 특징은? hooni 2015.04.20 1001
1164 System/OS Enable Safari Hidden Debug Menu in Mac OS X file hooni 2017.02.07 1145
1163 System/OS Enable the Develop Menu in Safari file hooni 2017.02.07 1071
1162 Develop GCM 사용하기 2 (단말에 GCM 구현하기) file hooni 2013.07.06 23248
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98