본문 바로가기

반응형

진리는어디에

(291)
데드락 회피 - 은행원 알고리즘 이전 포스트 : 데드락 회피에서는 데드락 회피의 개념, 안전 상태와 그렇지 않은 상태의 개념을 알아보았다. 그리고 데드락 회피를 구현하기 위한 자원 할당 그래프 알고리즘(Resource-Allocation Graph Algorithm)과 은행원 알고리즘(Banker's Algorithm)의 이론적인 측면들 또한 살펴 보았다. 오늘 포스트에서는 일정 금액이 있어야 사업을 마치고 상환을 할 수 있는 고객들에게 어떤 순서로 한정된 은행의 돈을 빌려 주고 돌려 받아야 모든 고객들의 요구를 만족 시킬 수 있는지 고민하는 은행원 알고리즘의 실제 예제를 만들어 봄으로써 은행원 알고리즘에 대한 이해도를 높이도록 한다. 잠깐! 시작하기 전에 본격적으로 시작하기 전에 은행원 알고리즘에 대해 잠깐 되짚어 보자. 은행원 알고..
[C++] 데드락 방지 락(deadlock free lock) - 순환 대기(Circular wait) 제거 들어가며 이전 글 데드락(Deadlock)에서 데드락이 발생하기 위해서는 상호 배제(Mutual Exclusion), 점유 대기(Hold and Wait), 비선점(Non-Preemption), 순환 대기(Circular Wait). 이 네가지 조건이 모두 충족되어야 한다고 이야기 했다. 예를 들어 두 유저간의 거래를 처리하는 서버가 있다고 가정하자. A가 B와의 거래를 요청 한다. 동시에 B가 A와의 거래를 요청한다. 서버는 스레드 1번에서 A->B의 거래를 위해 요청자인 A유저 객체의 lock을 설정한다. 동시에 스레드 2번에서 B->A의 거래를 위해 요청자인 B유저 객체의 lock을 설정한다. 스레드 1번은 A->B의 거래를 완료하기 위해 B유저 객체의 lock을 마저 설정 하려고 하지만 B유저 객..
데드락(Deadlock) 개념 정리 오늘 다뤄볼 내용은 이름만 들어도 프로그래머의 가슴을 답답하게 만드는 '데드락(Deadlock)'이다. 이 포스트를 통해서 우리는 데드락의 기본 개념, 데드락 발생 조건, 데드락 탐지, 데드락 방지, 데드락 회피, 데드락에서 벗어나는 법을 알아 볼 것이다. 데드락(Deadlock)이란? 멀티 프로그래밍 환경 또는 멀티 스레드 환경에서는 여러 프로세스 또는 스레드가 한정된 자원을 동시에 사용하기 위해 항상 경쟁 상태에 놓여 있다. 이 때, 어떠한 이유로든 프로세스가 필요한 자원을 획득하지 못하고 영원히 자원을 기다리는 상태로 남아 있는 것을 데드락이라고 한다. 어떻게 보면 자원을 획득하지 못하고 있다는 점에서 기아상태(starvation state)와 비슷하지만 이것은 영원히 헤어 나올 수 없는 상태라는 ..
[VBA] Range와 Cell 완벽 가이드 이 포스트는 Excel Macro Mastery 사이트의 'The Complete Guide to Range and Cells in Excel VBA(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 엑셀 VBA의 Range와 Cell에 대해 다룹니다. Range & Cell 사용법 요약 함수 파라메터 리턴 타입 예 결과 Range cell 주소 멀티 셀 Range("A1:A4") $A$1:$A$4 Cells 행(row) 번호, 열(column) 번호 단일 셀 Cells(1, 5) $E$1 Offset 행(row) 번호, 열(column) 번호 멀티 셀 Range("A1:A2").Offset(1, 2) $C$2:$C$3 Rows 행(row) 번호 또는 행(row) 범위 단일 ..
[VBA] Worksheet 완벽 가이드 주말이 참 빨리 흘러 갑니다. 잠깐 책 좀 폈다, 잠깐 읽었다 싶으면 하루가 날아가네요. 오늘은 이전 포스트 '[Excel] VBA - Workbook 완벽 가이드'에 이번에는 VBA 스크립트의 Worksheet에 대해 공부 해보려고 합니다. 원문은 Excel Macro Mastery 사이트의 The Complete Guide To The VBA Worksheet(by Paul Kelly)입니다. 혹시 제가 제대로 이해하지 못하고 헛소리 하는 부분이 있다면 알려주시면 감사하겠습니다. VBA Worksheet 사용법 요약 NOTE - 아래 간략 예제에서는 코드의 간략성을 위해 워크북(Workbook)을 명시하지 않았습니다. 여러분이 실제 코드에서 사용하실 때는 ThisWorkbook.Worksheets, ..
[VBA] 디버깅(Debugging) 프로그램을 개발하다 보면 언제나 생각 처럼 동작해주지 않습니다. 왜 프로그램이 내가 원하는대로 동작하지 않는지 알아 보기 위해서는 디버깅이 필수적이지요. VBA를 이용해 아무리 간단한 매크로를 만들 때도 디버깅에 관해서는 예외가 없습니다. 이번 포스트는 VBA 디버깅에 관한 이야기를 해보도록 하겠습니다. Debug.Print 전통적으로 가장 접근하기 쉬운 디버깅 방법은 내가 원하는 내용을 출력해보는 것입니다. VBA에서도 내가 궁금한 내용을 출력 해볼 수 있는 Debug.Print 라는 간단한 방법을 제공하고 있습니다. 아래는 워크북 개체의 프로퍼티들을 출력하는 간단한 샘플 코드입니다. 아래의 예제를 위해 'Example.xlsm' 이라는 엑셀 문서가 미리 만들어져 있다고 가정하겠습니다. Public S..
[VBA] Workbook 완벽 가이드 처음엔 굼뜨고 보잘것 없는 프로그래밍 언어라고 생각했는데 적당한 중소형 규모 데이터를 처리하는데 이 보다 좋은 툴이 없습니다. 데이터 시트와 그걸 다루기 위한 유용한 함수들을 제공해주고, 함수를 지원하지 못한다면 직접 만들어 사용 할 수 있도록 스크립트도 지원합니다. 유저 컨트롤을 마음대로 붙여 넣을 수 있으며, 데이터 프로세싱 로직도 마음대로 추가 할 수 있습니다. 세상에 적당한(?) 규모의 데이터를 처리하기에는 이보다 더 좋은 도구를 찾지 못하겠습니다. 역시 오랜 기간 사람들에게 사랑 받아 온 제품은 다 이유가 있구나라는 생각이 드네요. 그래서 조금 더 알아 보고 싶어 지네요..❤ 아래 내용들은 Excel Macro Mastery의 The Complete Guide To The VBA Workbook..
도메인 이름을 이용해 IP 주소 얻기(getaddrinfo) #include #include #include int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res ); struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* AF_XXX */ int ai_socktype; /* SOCK_XXX */ int ai_protocol; /* 0 or IPPROTO_XXX for IPv4, IPv6 */ size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *a..
[VBA] Visual Basic for Application 본 문서는 프로그래밍을 20여년 해온 본인이 VBA(Visual Basic for Application) 스크립트를 처음 사용해보면서 알게된 기본적인 내용들을 기록하기 위해 작성 되었습니다. 변수는 무엇인지 또 클래스는 무엇인지 등의 기본 개념들에 대해서는 언급하지 않고 변수를 선하고 사용하는법, 클래스를 만드는 법 등의 '사용법'을 위주로 다룹니다. 물론 프로그래밍에 대해 아무것도 모르고 엑셀을 사용하면서 '매크로'라는 기능을 사용해보고 싶은 사람도 이 포스트를 보고 공부를 할 수는 있지만 근본적인 궁금증은 해결하기 어려울 것입니다. 하지만 아직 뭐가 궁금한지도 모르는 사람이라면 이 포스트가 하나의 시작점이 될 수 있을 것이라 생각합니다. 시작 비주얼베이직 프로젝트 창 띄우기 VBA를 사용하는데 사실 ..
[VBA] CSV 저장(export) 서문 제가 개발하고 있는 게임에서는 게임 내 메타 데이터(아이템, 퀘스트, 이벤트 관련 데이터 등등)를 csv를 이용하고 있습니다. 엑셀에서 강력한 함수들을 이용해 아이템의 레벨이라던지 경험치 배분을 관리하고 완료 되면 최종 단계에서 csv로 export하여 인게임에서 가져다 씁니다. 그런데 매번 데이터 변경이 있을 때 마다 각 시트를 export하기 너무 귀찮습니다. 관리하는 시트가 한 두개였을 때는 문제가 없었지만 많아지니 답도 없습니다. 그리고 시트가 많아지니 내가 무슨 시트를 수정했는지 기억도 안납니다. 그래서 생각한 것이 단축키 한번에 모든 시트들을 'csv'로 export 해줄수 있으면 좋겠다. 인터넷에서 csv로 export 해준다는 vba 소스를 찾아 복붙한 후 실행 시켰습니다. 그런데 이..

반응형