나는 (데이비드 Butenhof에 의해) POSIX 스레드 프로그래밍을 읽고있다, 그는 pthread와 라이브러리를 사용하여 언급 :pthread 라이브러리를 통한 메모리 가시성?
가 뮤텍스를 잠금을 해제 할 때 볼 수있는 스레드 값간에 메모리모든 갑자기, 나는 다음과 같은 코드가 유효한지 여부를 궁금해 :직접 또는에서 대기로를 조건 변수는 나중에 동일한 뮤텍스를 잠그는 임의의 스레드에서 보이는 일 수 있습니다. 다시, 뮤텍스가 잠금 해제되기 전에 쓰여진 데이터 은 잠금 전에 쓰기가 발생하더라도 뮤텍스를 잠그는 스레드 인 에서 반드시 볼 필요는 없습니다.
스레드 A :
strcpy(buffer, "hello world");
pthread_spin_lock(&lock); // assuming the mutex in the statement above can be interchanged with spinlock. I don't see why it can't
pthread_spin_unlock(&lock);
스레드 B :
pthread_spin_lock(&lock);
pthread_spin_unlock(&lock);
// read buffer; assuming thread B has a copy of the pointer somehow
내 질문은 : 스레드 수 B 버퍼에서 "hello world"를 참조 하시겠습니까? 그의 성명서에 따르면, 그것은해야한다. 나는 "일반적인"방법은 자물쇠로 공유 "자원"을 보호하는 것입니다 이해합니다. 하지만 strcpy()가 임의의 시간에 발생한다고 가정 해 봅시다. 프로그램의 수명이 다 된 시점에서 한 번만 발생할 수 있습니다. 스레드 A가 pthread_spin_unlock()을 호출 한 후에 스레드 B가 어떻게 든 pthread_spin_lock()을 호출한다고 가정 해 봅시다 :
: 다른 스레드에서 버퍼를 볼 수 있도록 변경하는 빠른 방법이 있습니까? 이식성이 문제가 아니며 CentOS를 사용한다고 가정 해 보겠습니다. 내가 생각할 수있는 한 가지 대안은 mmap()을 사용하지만 pthread 라이브러리를 사용하지 않고 모든 변경 사항을 전역으로 볼 수 있는지 여부를 확신하지 못하는 것입니다.
mmap() 개념은 여러 프로세스가 동일한 메모리를 볼 수 있도록 허용한다고 생각합니다. 스레드는 말할 것도 없습니다. – Jiminion
@Jim 귀하의 회신에 감사드립니다. 음 ... mmap()은 아마도 MAP_SHARED와 함께 작동합니다. 더 빠른 방법이 있는지 확실하지 않습니다. – Hei