목록전체 글 (431)
mojo's Blog
※ Using Semaphores to Coordinate Access to Shared Resources Basic idea : 스레드는 세마포어 작업을 사용하여 다른 스레드에 일부 조건이 참임을 알린다. counting semaphores 을 사용하여 리소스 상태를 추적하고 다른 스레드에 알림 mutex 를 사용하여 리소스에 대한 액세스 보호 Two classic exmaples : The Producer-Consumer Problem The Readers-Writers Problem ※ Producer-Consumer Problem Common synchronization pattern : 생산자는 빈 슬롯을 기다렸다가 버퍼에 아이템을 삽입하고 소비자에게 알린다. 소비자가 아이템을 기다렸다가 버퍼에..
※ Shared Variables in Threaded C Program Question : Threaded C 프로그램에서 공유되는 변수는 무엇인가? "global variables are shared" 및 "stack variables are private" 처럼 간단한 질문이 아니다. Define : 변수 x는 여러 스레드가 x의 일부 인스턴스를 참조하는 경우에만 공유된다. 다음 질문에 대한 답변이 필요하다. 스레드의 메모리 모델은 무엇인가? 변수의 인스턴스는 어떻게 메모리에 매핑되는가? 이러한 각 인스턴스를 참조할 수 있는 스레드는 몇 개인가? ※ Threads Memory Model Conceptual model : 단일 프로세스의 컨텍스트 내에서 여러 스레드가 실행됨 각 스레드에는 고유한 개별..
1. 숫자 문자열과 영단어 문제 링크 : 코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 단순 문자열 구현 문제이다. 숫자와 영단어가 섞인 문자열이 주어질 때 이를 숫자로 나타내도록 구현해야 한다. 우선, 숫자는 20억 이하의 숫자이므로 자연스럽게 int 형임을 확인할 수 있다. 문자열을 인덱스 i 를 이용하여 처음부터 접근할 때 숫자인 경우와 영단어인 경우를 구분한다. 그리고 숫자를 문자열 result 로..
문제 링크 : 1944번: 복제 로봇 (acmicpc.net) 1944번: 복제 로봇 첫째 줄에 미로의 크기 N(4 ≤ N ≤ 50)과 열쇠의 개수 M(1 ≤ M ≤ 250) 이 공백을 사이에 두고 주어진다. 그리고 둘째 줄부터 N+1째 줄까지 미로의 정보가 주어진다. 미로는 1과 0, 그리고 S와 K로 주어 www.acmicpc.net 최소 스패닝 트리 문제이다. 문제의 input 을 고려해서 어떻게 정답을 찾을지를 생각해보도록 하자. 5 2 11111 1S001 10001 1K1K1 11111 우선, 문제에서 요구한 것은 로봇의 시작지점인 S 부터 열쇠 K 를 모두 획득하는데 움직이는 횟수의 합을 최소로 하는 것이다. (2, 2) 에 있는 S 로 부터 시작하여 (2, 2) => (4, 2) => (4..
※ Concurrent Programming is Hard! 동시 프로그램의 고전적인 문제 클래스: Races : 결과는 시스템 내에 다른 곳의 arbitrary scheduling 결정에 따라 달라진다. 예: 비행기의 마지막 자리는 누가 차지할까? Deadlock : 잘못된 자원 할당으로 인해 앞으로 진행되지 않게 된다. 예: 교통 체증 Livelock / Starvation / Fariness : 외부 event, 시스템 scheduling 결정으로 하위 작업 진행이 방해될 수 있다. 예: 사람들은 항상 내 앞에 줄서서 뛰어오른다. ※ Iterative Servers Iterative Servers 는 한 번에 하나의 요청을 처리한다. 만약 Client 1, 2, 3 가 존재하고 Iterative s..
※ Sockets Interface : socket 클라이언트와 서버는 socket 함수를 사용하여 socket descriptor 를 생성합니다. int socket(int domain, int type, int protocol) Example : int clientfd = Socket(AF_INET, SOCK_STREAM, 0); AF_INET : 32비트 IPV4 주소를 사용 중임을 나타낸다. SOCK_STREAM : 소켓이 연결의 끝점이 됨을 나타낸다. 프로토콜에 따라 다르다. 가장 좋은 방법은 getaddrinfo 를 사용하여 parameter 를 자동으로 생성하여 코드가 프로토콜에 의존하지 않도록 하는 것이다. ※ Sockets Interface : bind 서버는 bind 를 사용하여 커널에..