본문 바로가기

programing/Thread7

데드락(Deadlock) 발생 조건 - 한 스레드(프로세스)가 cpu를 계속 점유하여 다른 스레드(프로세스)가 접근하지 못하게 되는 상태 - 데드락은 다음 네 가지 조건을 모두 충족할 때 발생 1) mutual exclusion (상호배제) : 한 번에 한 프로세스만 공유 자원을 사용할 수 있다. 2) hold and wait (점유하며 대기) : 하나의 자원을 점유 하고 있는 프로세스가 다른 점유된 자원을 추가로 얻기 위해 대기 해야 함. 3) no preemption(선취 불가능) : 자원들을 선점할 수 없어야함.(비선점) 한 프로세스가 다른 프로세스가 가진 접근 권한을 강제로 취소할 수 없다. 4) circular cycle(순환 대기) : 두 개 이상의 프로세스가 다른 프로셋의 자원 접근 권한을 개방하는 것을 기다리고 있는데, 그 .. 2017. 10. 10.
쓰레드 풀 - WaitForSingleObject()로 Event 핸들 넣어서 대기 - 일(함수 포인터)이 생기면 일을 넣고 Event핸들로 깨움cf. 다른 동기화 기법을 사용할 수 있을까 생각 했는데 Event만 원격으로 쓰레드를 자유자재 컨트롤 가능 (같은 조건에서 루프를 계속 돌리다가 멈춘다던가...) cf. 크게 상관이 없으면 다른 동기화 기법을 이용해도 무리는 없을 것 같음 - 일을 풀에 등록할 때는 메인 쓰레드와 워커 쓰레드가 race condition이 될 수 있으므로 동기화 기법 필요 - 이벤트 기반 동기화의 이해 필요 2017. 2. 23.
Fiber - 스레드는 선점 방식으로 멀티태스킹을 함 >시스템이 작업 시간이 끝났다고 결정을 하면, 작업 스레드에서 CPU를 빼앗아 다른 작업 스레드에게 CPU를 할당함 - 좀 더 긴 시간 동안 CPU를 점유하기 원하는 경우 Fiber를 사용 (비 선점형 스케쥴링) - 함수 LPVOID WINAPI ConvertThreadToFiber ( LPVOID lpParameter ); // 성공 : 파이버 주소 반환 > 메인 스레드를 파이버로 변환하는 함수 LPVOID WINAPI CreateFiber ( DWORD dwStackSize, // 1개의 파이버를 생성할 때 할당할 메모리 크기 PFIBER_START_ROUTINE lpStartAddress, // 파이버에 사용할 콜백 함수 LPVOID lpParameter .. 2015. 6. 9.
[링크] 멀티쓰레드 프로그래밍이 왜이리 힘드나요? http://ndcreplay.nexon.com/NDC2014/sessions/NDC2014_0048.html#k%5B%5D=%EC%93%B0%EB%A0%88%EB%93%9C Ndc12 2 from 내훈 정 Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지) from 내훈 정 2015. 6. 2.