매우 근본적이라면 죄송합니다. 이것은 내가하는 일의 단순화 된 버전입니다. 나는 커널 모듈을 작성 중이다. 실행 중일 때 두 개의 서로 다른 실제 CPU 하나가 두 개의 스레드가됩니다. 전역 변수를 사용하여 이러한 스레드 간의 특정 통신을 수행합니다. 이상한 것은 하나의 스레드에 의한 쓰기가 다른 스레드에 의한 쓰기가 때때로 보이지 않는다는 것입니다. 그 이유는 무엇일까요?하나의 CPU에 의해 쓰여진 값이 다른 것에 의해 보이지 않는 이유는 무엇입니까?
나는 그것이 메모리 장벽과 어쩌면 캐시 동기화와 관련이 있다고 생각하기 때문에 쓰기 후에 smp_wmb()를 사용해 보았지만 도움이되지는 않습니다. 그리고 내가 아는 한 캐시 동기화를 명시 적으로 제어 할 수 없습니다. 그래서 나는 좀 붙어있다.
아이디어가 있으십니까?
편집 : 설명이 단순화 된 버전임을 분명히하십시오.
많은 일이있을 수 있습니다. 커널 모듈이 C로 가정하기 때문에 volatile 변수를 선언 했습니까? –
@GabeSechan 예, 시도했습니다. – TFC
다른 커널 코드에서 사용하는 패턴을 따르십시오. 또한 매우 특별한 일을하지 않는 한 쓰기 메모리 장벽은 쓰기 전에 있어야합니다. 이 가치는 어떤 의미를 전달합니까? –