각 스레드가 가상 메모리의 다른 영역에서 작동하는 경우 독립적으로 OpenMP 또는 Posix 스레드를 실행하여 mlock()을 안전하게 호출 할 수 있습니까? 그것은 시스템 전체 동기화 장벽을 만들거나 모든 스레드가 어떤 식 으로든 멈추게합니까?mlock() 및 스레딩
중복되는 경우 사과드립니다. Google이 "mlock openmp"/ "mlock thread safety"를 검색하면 즉시 답변을 얻지 못해 놀랐습니다. 가장 가까운 것은 Non-blocking mlock()이라는 두 번째 대답이었습니다. mlock()은 별도의 스레드에서 호출 할 수 있으며 동기화 장벽을 적용하거나 필요로하지 않음을 나타냅니다.
스레드가 안전하지 않은 함수 목록에서'mlock()'이 보이지 않습니다. http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html 아마 안전해야합니다. – EOF
감사합니다. 이는 또한 mlock이 스레드들 간의 암시 적 동기화를 유발하지 않는다는 것을 의미합니까? –
아니요,'mlock()'은 비동기 안전 함수 목록에 없습니다. http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html, 원할 경우 잠금을 걸 수 있습니다. . 이러한 잠금은 리프 수준 잠금이되므로 교착 상태에 참여할 수 없으므로 함수가 스레드 안전하지 않게됩니다. – EOF