🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

생각을 해봤는데 이해가 잘 되지않습니다. 질문 드립니다

22.07.19 19:42 작성 조회수 265

0

안녕하세요. 

지금 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

·

답변을 작성해보세요.

1

Lunch는 점심입니다

0

예제만 생각하면 안 됩니다.
실제 상황에선 특정 쓰레드가 read, write 모두 할 수 있습니다.

친절하고 빠른 답변 감사합니다!

채널톡 아이콘