생각을 해봤는데 이해가 잘 되지않습니다. 질문 드립니다
472
投稿した質問数 10
안녕하세요.
지금 ReadLock WriteLock 강의듣고 혼자서 구현해보는 연습중에 궁금한점이 있어서 문의드립니다.
Main부분에서
for (int i = 0; i < 2; i++)
{
threaManger->Luncher(ThreadWrite);
}
for (int i = 0; i < 5; i++)
{
threaManger->Luncher(ThreadRead);
}
고유 스레드 아이디를 부여해서
스레드 2개는 Write("스레드 아이디" 1,2)
스레드 5개는 Read ("스레드 아이디" 3,4,5)
일을 시키는데
이렇게 되면 Read만 하는 스레드는 ReadLock만 잡고
Write만 하는 스레드는 WirteLock만 잡게 되어서
1번 아이디의 스레드(Write)가 Read Lock을 잡을 수 없지 않나요?
아래 코드에서 Readlock 함수를 보면
WRITE_THREAD_MASK를 씌어서 threadId를 비교하는데 이 부분은 실행 안될 거라고 생각되는데 맞나요?
실제로 디버그에서 ReadLock에 포인트를 잡고 봤는데 브레이크 포인트에 걸리지는 않았습니다.
제가 궁금한 걸 글로 쓰려니 잘 정리가 안돼서 죄송합니다.
질문을 요약하자면
1.ReadLock을 잡는 스레드의 id는 WriteLock을 잡는 스레드 id와 똑같을 수가 있나요?
// ReadLock
const int lockThreadId = (_lockFlag.load() & WRITE_THREAD_MASK) >> 16;
if (lockThreadId == SharedThreadId)
{
_lockFlag.fetch_add(1);
return;
}
// WriteLock
const int lockThreadId = (_lockFlag & WRITE_THREAD_MASK) >> 16;
if (lockThreadId == SharedThreadId)
{
_writeCount++;
return;
}

回答 2
0
예제만 생각하면 안 됩니다.
실제 상황에선 특정 쓰레드가 read, write 모두 할 수 있습니다.
Memory Pool에서 오버플로우 질문입니다.
0
60
2
포토폴리오 및 진로 관련하여 고민입니다.
0
107
1
포토폴리오 관련 고민입니다.
0
58
1
실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.
0
79
2
성능 테스트 결과
0
100
2
게임 서버 Stateful, Stateless 진로 고민
0
117
1
WaitOnAddress와 Sleep의 차이 질문
0
80
1
궁금한거 있습니다.
0
79
2
JobTimer 구동 스레드
0
105
2
TryPop() 동작 관련 질문
0
79
1
로드맵 C#서버 C++서버 방향성 질문
0
144
2
스레드 id를 출력할떄 메인스레드 id도 출력되나요?
0
71
1
생명주기를 위한 의도적 복사
0
83
2
락프리의 실무에서 사용 질문
0
137
2
32bit threadID와 16비트 상위 WriteFlag에 대해
0
99
2
mutex와 sleep 차이점
0
115
1
실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다
0
150
2
Stomp Allocator의 Release함수에 대한 질문입니다.
0
93
1
공부법 관련해서
0
181
2
MakeShared 함수 관련
0
112
1
지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.
0
141
2
운영체제관련 질문입니다
0
128
1
send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.
0
115
2
메모리 풀 질문있습니다.
0
121
1

