프로그래밍에서 ' 원 자성 '의 정확한 정의는 무엇입니까?

“원 자성”의 정의는 트랜잭션이 프로세스 중에 동시에 실행되는 작업에 의해 건드 리거나 조작되지 않고 종료 될 수 있어야한다고 말합니다. 그러나 그것은 또한 프로그램이 원자 적이어야 할 때 동시에 실행되어서는 안된다는 것을 의미합니까?

예를 들어 2 개의 프로그램이 있다고 가정 해 봅시다 :

example_program1 :

int i = 1 ~ 100 초마다 계산

모든 숫자가 새 줄에 인쇄됩니다.

example_program2 :

" hi

및 이러한 프로그램을 모두 포함하고 특정 프로그램을 시작하라는 신호를 수신 한 후 실행하는 상위 프로그램 (예 : Linux의 sigaction을 통해) 2 버전 :

버전 1 :

신호를 수신하면 언제든지 프로그램을 실행합니다 (동시 실행 가능).

즉, program2는 " hi "를 인쇄 할 수 있지만 program1은 여전히 숫자를 인쇄하고 있습니다.

버전 2 :

만 한 번에 하나의 프로그램 실행

진행중인 프로그램이 종료 될 때까지 다른 프로그램에 대한 신호가 차단됩니다.

이 예에서는 버전 2는 원 자성 또는 둘 다로 간주됩니까? 예를 들어 program2가 프로세스 중에 i를 1 씩 증가시키는 경우에만이 프로그램이 비원 자적일까요?

코멘트

  • atomic "은 서로 다른 컨텍스트에서 여러 가지 방식으로 사용됩니다. 때로는 매우 비슷하지만 여전히 다른 방식입니다. 비공식적으로도 자주 사용됩니다. 귀하의 질문은 데이터베이스 이론을 기반으로 한 정의로 시작하지만 프로그램에 대해 이야기합니다. 귀하의 정의는 " 거래 "에 대해 이야기하지만 프로그램에 거래가 없습니다. ' " 원자 "의 잘못된 정의를 실수로 사용하고있을 가능성이 있습니다. (원자성에 대한 정의도 ' ACID의 의미와 실제로 일치하지 않습니다.)

답변

작업 X가 원자 적이면 작업을 관찰하는 모든 사람이 작업을 아직 시작되지 않았거나 완료된 것으로보고 부분적으로 완료된 상태가 아니라는 것을 의미합니다. 그게 다입니다.

분명히 X 작업을 수행하기위한 코드를 작성하고 다른 코드에서 작업 X를 수행하는 것을 확인하거나 방해 할 수 있다면 X 작업 구현은 원 자성이 아닙니다.

p>

일부 상황에서 “원자 적”작업은 성공하거나 실패 할 수 있습니다. 이러한 원자 적 작업이 실패하면 작업이 시작된 적이없는 것과 정확히 동일해야합니다.

설명

  • 참고로 이것은 원 자성이 의미하는 것이 아니라 ACID에서 격리가 의미하는 것입니다. ' 정의는 원자성에 대한 ACID 개념을 일치 / 포괄하기위한 것입니다 (임의 코드와별로 관련이없는 ').

답변

프로그래밍 언어에 대한 “원자”의 단순하고 형식적이며 추상적 인 정의에 대해 잘 모르겠습니다. 나는 다양한 추상화 수준과 다양한 주제와 관련하여 많은 다른 것들을 알고 있습니다. 나는 또한 상당히 추상적으로 보이지만 상당히 정교한 전제 조건 (예 : 동시성의 presheaf 모델)을 가지고있는 것을 알고 있습니다. 문제의 일부는 두 프로그램이 “동등하게” “동등하게 작동한다”고 말하는 여러 가지 방법이 있고 일부 정의는 “동등”이라는 다른 개념을 존중할 수 있다는 것입니다.

스케치 (제가 만들고있는 것) 동시성 인터리빙 모델과 관련된 한 가지 접근 방식은 다음과 같습니다. 운영 의미 체계가 주어지면 일련의 문은 원자 적으로 실행됩니다. 해당 문과 관련된 모든 전환 (운영 의미 체계)이 순서대로 발생하는 경우 문 시퀀스는 atomic 입니다. 가능한 모든 전환 시퀀스는 명령문의 시퀀스를 원자 적으로 실행합니다. 가능한 모든 전환 시퀀스가 동등하다고 말함으로써 형식화를 시작할 수있는 “ 마치 원자 적으로 실행 된 것처럼 ” 아마도 관찰 상 동등 함) 명령문을 원자 적으로 실행하는 일련의 전환에 해당합니다.

B 비정상적으로, 원자 적으로 실행된다는 것은 일단 우리가 어떤 일련의 명령문을 실행하기 시작하면 다른 명령문을 시퀀스 실행에 삽입하지 않는다는 것을 의미합니다.구현 측면에서 이것은 스레드의 시간 분할 구현에서와 같이 한 번에 하나의 스레드 만 실행한다는 것을 의미 할 수 있으며, 일련의 명령문이 원자 적으로 실행되면 실행 중에 컨텍스트 전환이 없음을 의미합니다. 위의 정의는 “실제로 스레드 간의 조정을 잘 처리하지 못한다는 점에서 문제가 있습니다. 예를 들어 두 스레드 간의 채널을 통한 통신이 원자 적”이라고 말하는 것은 실제로 이치에 맞지 않습니다. (종종 우리는 데이터 구조에 대한 연산에 대해 원자 적이라고 말하며,이 예에 더 적합 할 것입니다. 정의는 데이터 구조에 따라 다릅니다.)

예제 프로그램의 경우 print 문이 단일 전환으로 처리 될 수있는 작동 의미 체계, 그러면 프로그램 2는 항상 원자 적으로 실행되고 (상당히 사소한) 원자 적입니다. 두 번째 실행은 프로그램 1이 원자 적으로 실행되고 첫 번째 실행은 실행되지 않는 시나리오를 설명합니다. 두 번째 실행이 항상 발생하도록 보장하는 메커니즘이 있다면 Program 1 (해당 메커니즘 포함)이 원자 적이라고 말할 수 있지만 그렇지 않으면 아마도 자체적으로 원 자성이 아닐 것입니다.

“원자 적”은 종종 비공식적 및 / 또는 구현 지향적 인 의미로 사용됩니다. 따라서 의도 된 내용의 정신은 일반적으로 합리적이지만 정확하게 의도 된 내용이 명확하지 않은 경우가 많습니다.

답변

프로그래밍에서 Atomic이라는 단어의 깊고 어두운 고대 기원은 어셈블리 언어 명령 ATOMIC을 나타냅니다. 개별 입자 그룹 (양성자, 중성자, 전자)이 원자라고하는 깨지지 않는 단일 단위를 형성하는 것과 같은 방식으로 ATOMIC 프로그래밍에서 단일 무중단 단위 명령어를 형성하는 조립 명령어 그룹을 나타냅니다. . 첫 번째 어셈블리 명령은 UNATOMIC과 같은 것으로 인터럽트가 다시 시작될 때까지 모든 인터럽트를 일시 중단하는 ATOMIC입니다.

그 이후로 ATOMIC이라는 단어는 마케팅에서 심하게 오용되었습니다. 단일 명령어를 ATOMIC이라고 부르는 것은 어리석은 일입니다.

ATOMIC은 원래 약어 였지만 “A seT? Of Multiple Instruction Clusters”일 수도 있습니다.-죄송합니다. T에 대해 확실하지 않습니다. 수년.

댓글

  • Calling a single instruction ATOMIC is just silly 글쎄요, 원자력 둘 이상의 버스 사이클과 테스트 및 설정 과 같은 지침이 포함 된 메모리 전송

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다