인프런 커뮤니티 질문&답변
32bit threadID와 16비트 상위 WriteFlag에 대해
작성
·
29
0
32비트짜리 threadID를 비트 연산으로 16비트 옮겨준뒤 짤라준 것을 WriteFlag에 담는 과정에서 손실이 일어나는거 아닌가요?

그래서 현재 ThreadID와 _lockFlag의 WriteFlag를 다시 16비트 옮겨준 값이랑 비교했을 때 일치하지 않는 문제가 발생할 수 있지 않나요?
강의 18:40초입니다.
( ThreadID를 16비트로 관리하지 않는 이유는 또 무엇인가요??? )
답변 2
0
어차피 쓰레드는 많아야 최대 30개 수준입니다.
따라서 int8, int16, int32 뭐로 관리하더라도 상관없고
사실 손실 문제는 걱정할 필요가 없습니다.
손실은 무조건 일어나는 것이 아니고, 아주 큰 숫자를 캐스팅할 때나 일어나는 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 넘블님.
강의 중 32비트 threadID를 비트 연산을 통해 16비트로 변환하고 WriteFlag에 적용하는 과정에서 데이터 손실에 대한 우려가 있으신 것 같네요. 해당 문제는 비트 마스킹과 시프트 연산을 적절히 사용하여 해결할 수 있습니다.
비트 연산에서의 데이터 관리
비트 시프트 및 마스킹: 32비트 값을 16비트로 줄이는 과정에서 비트 시프트(
<<)와 마스킹(& WRITE_THREAD_MASK)을 사용하여 상위 비트에 필요한 값을 정확히 저장할 수 있습니다. 즉, 필요한 부분만 남기고 나머지를 제거하며, 의도한 대로 데이터가 잘 관리될 수 있도록 합니다.데이터 비교:
lockThreadId는 현재LThreadId와 비교하기 위해 16비트 시프트 후WRITE_THREAD_MASK로 마스킹됩니다. 이는threadID가 고유하게 저장되고, 중복없이 비교되는 것을 의미하며, 만약 정확히 동일한threadID를 사용하는 스레드가 다시 접근할 경우에만 성공적으로 연산됩니다.
16비트 사용의 이유:
- 메모리 절약: 전반적인 성능 개선을 위해, 모든
threadID에 정수형 전체(32비트)를 사용하는 대신, 충분한 정보가 전해진다면 16비트만을 사용하는 것이 가능합니다.
- 시스템의 요구사항에 맞춘 설계로,
threadID의 범위가 16비트 내에서 충분한 경우 효율적일 수 있습니다.
- 메모리 절약: 전반적인 성능 개선을 위해, 모든
자세한 내용과 실질적인 코드 예제는 아래의 링크에서 확인하실 수 있습니다:
- WriteLock 함수의 desired값 초기화 관련 질문
이 설명이 문제를 이해하는 데 도움이 되기를 바랍니다. 해당 주제와 관련하여 추가적인 질문이 있으시면 언제든지 문의해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






답변 감사드립니다!!