리눅스 커널 코드 스니펫 #17 net_families
6.6.4 net/socket.c:227 net_families: struct net_proto_family *[NPROTO], RCU, READ MOSTLY 네트워크 프로토콜 패밀리의 생성자를 관리하는 구조체 배열인 net_families 의 선언입니다. __rcu(Read-Copy Update) 매크로로 선언되어 있어서 읽기 수행 시에 잠금없이 사용할 수 있음을 알 수 있고, __read_mostly 로 말 그대로 읽는 작업이 주로 일어나는 변수임을 알 수 있습니다. __rcu 로 정의된 것 처럼 읽기 시에는 잠금이 일어나지 않지만, 업데이트 수행 시에는 잠금을 통해서 멀티프로세스 환경에서 일관성을 유지해야 하기에 net_family_lock 스핀락을 사용합니다. 스핀락은 잠금 시간이 짧은 경우 컨텍스트 스위칭을 일으키지 않고 잠금을 수행할 수 있기에 net_proto_family 구조체처럼 간단한 업데이트의 경우 뮤텍스보다 더 효율적일 수 있을 것입니다.