원자성(atomic*) : 원론적으로 "더이상 나눌 수 없는 것" (원자폭탄 어쩌구 하면 안되고요.)
컴퓨터에서 이러한 연산은 여러 가지가 있습니다. 미세한 것부터 데이터베이스 트랜잭션까지 전반에 거쳐 있습니다.
----------------
type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...)
위 연산을 살펴보면,
1) 비교 : *ptr == oldval : 즉, ptr이 가리키는 주소의 값이 oldval과 동일하면
2) 값교환 : newval에 있는 값을 *ptr에 써라.
* sync(synchronization) : 이에 대한 처리가 동기적으로 처리됨을 보장함
중요: 그런데, 1)과 2)를 수행함에 있어서 원자적(atomic)하게 수행해야 한다.
즉, 1)과2)를 처리하기 전에, 다른 프로세스/쓰레드가 *ptr, oldval, newval을 바꾸지 못한다는 것이 보장되어야 한다. 라는 얘기가 되겠습니다.(원자성보장)
즉, 위 __sync_val_compare_and_swap()는 원자성을 보장하는 함수이다.라는 얘기지요.
* 참고: 멀티 프로세서/멀티 코어 및 멀티 태스크(멀티프로세스/멀티쓰레드) 환경에서는 위 1) 2) 를 원자적으로 처리하는게 기본적으로 보장되지 않으며, 이를 하드웨어 연산에 기초하여 원초적인 프리미티브로 구현하고 난 후, 이를 기반으로 상위 연산을 만들게 됩니다. 보통 이러한 일은 운영체제 디바이스 드라이버 영역에서 벌어지는 원시적인 일입니다.
* 화장실에서 일보고/뒤처리/나오기 이 사이에 누군가의 방해를 받지 않는 메카니즘이 보장된다는 의미입니다.
원자성(atomic*) : 원론적으로 "더이상 나눌
원자성(atomic*) : 원론적으로 "더이상 나눌 수 없는 것" (원자폭탄 어쩌구 하면 안되고요.)
컴퓨터에서 이러한 연산은 여러 가지가 있습니다. 미세한 것부터 데이터베이스 트랜잭션까지 전반에 거쳐 있습니다.
----------------
type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...)
위 연산을 살펴보면,
1) 비교 : *ptr == oldval : 즉, ptr이 가리키는 주소의 값이 oldval과 동일하면
2) 값교환 : newval에 있는 값을 *ptr에 써라.
* sync(synchronization) : 이에 대한 처리가 동기적으로 처리됨을 보장함
중요: 그런데, 1)과 2)를 수행함에 있어서 원자적(atomic)하게 수행해야 한다.
즉, 1)과2)를 처리하기 전에, 다른 프로세스/쓰레드가 *ptr, oldval, newval을 바꾸지 못한다는 것이 보장되어야 한다. 라는 얘기가 되겠습니다.(원자성보장)
즉, 위 __sync_val_compare_and_swap()는 원자성을 보장하는 함수이다.라는 얘기지요.
* 참고: 멀티 프로세서/멀티 코어 및 멀티 태스크(멀티프로세스/멀티쓰레드) 환경에서는 위 1) 2) 를 원자적으로 처리하는게 기본적으로 보장되지 않으며, 이를 하드웨어 연산에 기초하여 원초적인 프리미티브로 구현하고 난 후, 이를 기반으로 상위 연산을 만들게 됩니다. 보통 이러한 일은 운영체제 디바이스 드라이버 영역에서 벌어지는 원시적인 일입니다.
* 화장실에서 일보고/뒤처리/나오기 이 사이에 누군가의 방해를 받지 않는 메카니즘이 보장된다는 의미입니다.
감사합니다. ^^
==
감사합니다. ^^
ww
댓글 달기