programing

"본래 스레드 세이프(thread-safe)"란 무엇을 의미합니까?

cafebook 2023. 10. 5. 23:31
반응형

"본래 스레드 세이프(thread-safe)"란 무엇을 의미합니까?

"예를 들어, 일부 기능은 본질적으로 스레드 세이프(thread safe)입니다."라는 대사를 우연히 발견했습니다.

위키피디아는 "실 안전"을 다음과 같이 정의합니다.

코드 조각은 여러 스레드에 의해 동시에 안전하게 실행되도록 보장하는 방식으로 공유 데이터 구조만 조작하는 경우 스레드 안전합니다.

좋아요. 하지만 본질적으로 어떤 의미일까요?상속과 관련이 있습니까?

상속과는 관련이 없습니다.그것은 비공식적인 표현이고 더 유사하다는 뜻입니다.
"일부 기능은 그 특성상 나사산에 안전합니다."예를 들어 그렇지 않은 함수입니다.
touch any shared values/state is thread safe(아무튼 공유 값/상태는 스레드 세이프)"본질적으로 스레드 세이프(thread safe)"입니다

이런 맥락에서 저는 이를 "이를 달성하도록 설계되지 않은 상태에서 여전히 스레드 세이프(thread safe)"로 해석합니다.

물론 그 단어들이 연관되어 있기는 하지만 상속의 개념과 직접적인 연관성은 없습니다.물론 이것은 객체 지향 프로그래밍의 의미에서 상속의 예는 아닙니다.이것은 단지 그것의 핵심적인 성질로부터 실이 안전하다는 특성을 얻는 함수일 뿐입니다.

마법 건 memcpy()실에 안전한 것도 마찬가지입니다내부 상태나 "공유" 부작용이 없는 함수는 모두 그럴 것이며, 모든 함수가 "순수"해야 하고 부작용이 없는 함수형 프로그래밍이 병렬 프로그래밍에 매우 잘 적응하는 이유입니다.

실제로 일반적인 컴퓨터에서는 부작용 없이 "실제 작업"을 수행하는 것이 어렵습니다. 특히 I/O는 부작용에 따라 매우 많이 정의됩니다.그래서 순기능 언어도 종종 비기능적인 구석이 있습니다.

업데이트: 물론입니다.memcpy()은 스레드 다.다. 이것의 핵심 목적은 스레드 간에 공유되는 경우 안전하지 않은 메모리를 조작하는 것입니다. 구분되는 한합니다를 memcpy()

printf(), 즉 합니다에 문자를 (thread safe)는POSIX다를해하는, 스레드 세이프(thread safe)는 세이프( safe)는memcpy()하지 않다.

본래 스레드 세이프 기능은 스레드와 관련하여 특정한 설계 결정을 내릴 필요 없이 안전하며, 스레드 세이프를 강제하기 위해 재설계되는 것이 아니라 수행하는 작업 덕분에 스레드 세이프 기능이 수행됩니다.내가 아주 간단한 함수를 쓴다고 치자.

int cube(int x)
{
    return x*x*x;
}

공유 메모리에서 읽거나 공유 메모리에 쓸 방법이 없기 때문에 본질적으로 스레드 안전합니다.하지만 스레드 세이프가 아닌 특정 디자인과 동기화를 통해 스레드 세이프가 되는 기능도 만들 수 있었습니다.이전과 비슷한 기능이 있다고 가정해 보겠습니다.

void cubeshare()
{
    static int x;
    x = x * x * x;
    printf("%l", x);
}

이것은 스레드 안전이 아닙니다. 각 사용 간에 x 값이 변경될 가능성이 있습니다(실제로는 x가 캐시되지만 최적화 작업을 수행하지 않는다고 가정해 보겠습니다).

그러나 이 스레드를 다음과 같이 안전하게 만들 수 있습니다(이것은 의사 코드이며 실제 뮤텍스는 더 복잡합니다).

void cubesharesafe(mutex foo)
{
    static int x;
    lockmutex(foo);
    x = x * x * x;
    printf("%l", x);
    unlockmutex(foo);
}

그러나 이는 본질적으로 스레드 세이프(thread safe)가 아니며, 재설계를 통해 강제로 실행되도록 하고 있습니다.실제 사례는 종종 이것보다 훨씬 복잡하겠지만 이것이 가능한 가장 간단한 수준의 아이디어를 제공하기를 바랍니다.질문이 있으시면 아래에 댓글을 달아주시기 바랍니다.

의 경우 특정 원본에서 특정 대상으로 쓰기를 제공할 수 있는 스레드는 단일 스레드뿐입니다.: 최초 설계로 나사산이 안전합니다.

본질적으로 다음을 의미합니다. 목표를 달성하기 위해 기본 기능을 "조정"할 필요가 없습니다. 이 경우에는 나사산 안전입니다.

여러 개의 스레드가 동시에 동일한 "채널"을 방해할 수 있는 경우 데이터의 공유 척과 관련된 스레드 안전성 문제가 발생하게 됩니다.

내재적이란 어떤 것에 영구적으로 존재하는 것을 의미합니다.상속과는 아무 상관이 없습니다.기본적으로, 혹은 이미 몇몇 메소드들은 멀티태스킹 문제를 보호하거나 피하기 위해 스레드 세이프입니다.벡터, hash 테이블..예를 들어 스레드 세이프(thread safe) 클래스가 있습니다.아무것도..헷갈리는..몇가지 기능이 있습니다.기본적으로 스레드가 안전한..

언급URL : https://stackoverflow.com/questions/22908520/what-does-inherently-thread-safe-mean

반응형