버그 해결을 위한 모든 질문을 던져
+1 vote
387 views
멀티스레드 환경에서 A 리스트의 값을 변경할때에 락을 걸어서 쓰고 있는데

Read할때는 락을 안걸어도 될까요?

아무생각없이 락을 안걸고 테스트를 했엇는데 문제가 없어서 질문드립니다.
asked (9 point)
재 태그 , 387 views
어느 시점에 어느값이 읽힐지 무관하다면 상관없을거 같습니다.

원래 락을 거는게 맞군영,

https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-acquiresrwlockexclusive

 

현업에서 다들 요거 쓰시나요?

FastSpinLock이라고 코드 도는게 있던데 그거 사용하시나요?

으으현업의 많은분들이 댓글좀 달아주심 감사하겟습니다 ㅠㅠ

슬림락 잘 썼습니다. 여러 스레드에서 들어오는 요청을 특정 한 두개 스레드에서 계속 처리하는 형태에선 동시성 큐를 쓰는게 편했습니다.
배열의 사이즈가 정해져 있으며 (c++ 의 리스트나 벡터가 아닐것) 읽은 데이터가  정확히 맞아 떨어지지 않아도 될때 상관 없습니다. 아니면 해당 리스트의 값이 변경 되지 않을때도 (어플리케이션 로드 이후 종료시까지 )상관없습니다

2 answers

+2 votes
다수의 쓰레드가 공유하는 자원에 접근할 때는 항상 락을 잡아주는 게 정석입니다.

스핀락의 경우 컨텍스트 스위칭의 비용을 줄이기 위한 것인데, 주로 락을 거는 구간이 굉장히 짧을 때 많이 사용하게 됩니다. 또 멀티코어가 아닌 경우는 유용하지 않습니다.

제가 작업했던 경우는 대부분 비즈니스 로직의 구현에서는 직접적인 멀티쓰레딩에 대한 처리가 필요없도록 만들고,

큰 프레임워크 단에서만 멀티쓰레딩에 따른 고려를 하도록 작업을 했었습니다.

그리고 멀티쓰레드 상에서 데이터 전달을 위해서 컨테이너를 사용할 경우 주로 락프리 컨테이너를 사용했었습니다.

알려주신 A 리스트가 어떠한 역할을 하기 때문에 여러 쓰레드에서 공유되는지 검토해보세요.

로직 구현을 위해 사용된다면 전체적인 설계를 바꾸셔야할 것 같습니다.

멀티쓰레드 상의 데이터 공유를 위해서 사용한다면 다른 잘 구현된 적합한 락프리 컨테이너가 있는지 살펴보면 좋을 것 같네요.
answered (23 point)
+1 vote
간단하게 스레드들이 읽기와 쓰기, 또는 쓰기와 쓰기를 같은 메모리에 동시에 할수 있다면 락을 걸어야 합니다.

테스트로 실행해도 문제가 바로 발생하지 않을 수는 있지만 언제 터질지 알수 없는 시한 폭탄입니다.
answered (6 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

201 질문
311 answers
335 댓글
324 users