스레드 동기화
mutex·condition variable로 barrier와 semaphore를 구현했습니다. 병렬 Game of Life에서는 모든 스레드가 계산을 마친 뒤 결과를 쓰고, 쓰기가 끝나면 다음 세대로 넘어가도록 두 단계로 동기화했습니다.
스레드 동기화와 병렬 작업 분배를 실습했습니다. 별도의 2인 팀 프로젝트에서는 CAS 기반 연결 리스트의 삽입·삭제·검색과 스트레스 테스트를 담당했습니다.
개인 과제에서 pthread, mutex·condition variable, barrier·semaphore와 병렬 정렬을 구현했습니다. 여러 스레드가 공유 데이터를 다룰 때 실행 순서를 맞추고 작업을 나누는 방법을 실습했습니다.
팀 프로젝트에서는 제가 lock-free linked list를, 팀원이 skip list를 맡았습니다. 삽입·삭제·검색과 스트레스 테스트를 작성하면서 논리적으로 삭제된 노드의 메모리를 안전하게 해제하는 문제도 확인했습니다.
mutex·condition variable로 barrier와 semaphore를 구현했습니다. 병렬 Game of Life에서는 모든 스레드가 계산을 마친 뒤 결과를 쓰고, 쓰기가 끝나면 다음 세대로 넘어가도록 두 단계로 동기화했습니다.
병렬 quicksort에서 정렬할 구간을 task stack에 넣고 여러 worker가 꺼내 처리하도록 했습니다. 작은 구간은 별도의 정렬 처리로 넘겼습니다.
std::atomic 포인터와 compare-exchange로 삽입·삭제를 구현했습니다. 포인터의 표시 비트로 논리 삭제 여부를 구분하고 리스트에서 노드를 분리했습니다. 검색·유효성 검사·스트레스 테스트도 작성했습니다.
학습용 구현입니다. 연결을 끊은 노드를 바로 delete하는 부분은 안전한 메모리 회수 방식으로 보완해야 합니다. 팀원의 구현 범위는 skip list입니다.