안녕하세요. 조경완입니다. 이펙티브 자바를 보면 notify 대신에 notifyAll을 쓰라고 되어 있습니다. 사실 더 중요한 것은 Concurrent를 쓰라는 것이지만요. 왜 그런지는 아이템 81에 나와 있으니, deadlock이 발생하는 시나리오에 대해서만 짚고 넘어가 보도록 하겠습니다. 먼저 notify 메서드에 대한 설명을 보겠습니다. 깨우는데, a single thread라 되어 있습니다. 하나의 스레드를 깨웁니다. Object의 모니터에 대해서? Common의 get이나 put에는 wait가 있었는데요. main 클래스에 보면 이런 것이 있었습니다. 저는 Common 객체를 c 하나만 선언했고, put이나 get은 Common 클래스 안에 있었으니, c에 걸리는 무언가 정도로 보시면 됩니다. ..
분류 전체보기 검색 결과
리눅스에 있는 head 명령어에 대해 알아봅시다. 문제는 표준 출력으로 특정한 소스 파일들의 맨 마지막 줄만 제외하고 이어서 출력하라는 것입니다. man 페이지에서는, 기본적으로 파일에 있는 처음 10개 줄을 출력한다고 되어 있습니다. 10개 줄보다 적다면, 당연하게도 파일의 줄 수만큼 출력할 겁니다. file name은 여러 개 올 수 있습니다. 예를 들어 1.txt, 2.c와 같은 것들입니다. 옵션을 보니, 문제 상황에 맞아 떨어지는 것은 -c나 -n인 듯 싶습니다. 문제는 line과 관련된 것이므로, -n이나 --lines를 주면 좋겠네요. 여기서 [-]NUM이라는 것이 있는데, 앞에 -가 붙으면, 마지막 NUM개의 line을 제외하고 출력합니다. 예를 들어, 파일이 11개의 줄로 이루어져 있고 -..
레코드에 double, float과 같은 실수 타입이 있습니다. 예를 들자면, 0.1달러, 0.2달러와 같은 것들입니다. 이것을 double로 저장했을 때와 decimal로 저장했을 때 어떤 차이가 있을까요? 간단하게 알아보겠습니다. NewTable은 deci, dou, deci2, dou2 필드가 있습니다. deci가 prefix인 것은 decimal(10,5)로, dou가 prefix인 것은 double로 저장하였습니다. 데이터들을 넣어 보겠습니다. 이 테이블에 있는 데이터들을 보겠습니다. 그러면 1.3, 1.3, 1.3, 1.3과 1.1, 1.1, 1.1, 1.1이 나옵니다. 여기서 deci+deci2와 dou+dou2를 출력해 보도록 하겠습니다. 위와 같이 나오는데요. 각각 2.6, 2.6과 2...
누군가에게 이 글에 대한 메일을 받았습니다. if문 안에 wait를 썼는데 문제가 없나요? 이펙티브 자바 3판 item 80에서는 반복문 안에 wait를 쓰라는데. 사실 item 80은 wait notify 대신에 동시성 유틸리티를 쓰라는 겁니다. 그런데, 이 아이템에 언급된 것들 중에 짚고 넘어가야 할 문장들이 꽤 많은데, 그 중 하나는 반복문 안에 wait를 써라. 였습니다. 그만큼 어려우니, 그냥 동시성 유틸리티를 쓰라는 그림이였을지도 모르지만요. 메일로도 언급되었으니 짚고 넘어가겠습니다. 링크에 언급되었던 문제 상황을 바꾸어 보겠습니다. 2명의 생산자가 각각 10개의 item을 생산하고, 2명의 소비자가 각각 10개의 item을 소비합니다. 먼저, worker1 스레드 2개와 worker2 스레드..
안녕하세요. 조경완입니다. 백준에서 문제들을 풀다 보면, 소수인팰린드롬 문제도 보셨으리라 생각합니다. 어렵지 않은 문제이지만, Loop를 칠 때, 어떻게 치면 좋은지 생각해 볼 수 있는 문제인 듯 싶어서 가지고 오게 되었습니다. 문제는 아래와 같습니다. 최악의 경우에는 a가 5, b가 1억이니 만만치 않은 문제인 듯 싶습니다. 그런데, 314명이 풀어냈습니다. 1억까지를 에라스토스테네스의 체로 거른다고 해도 힘들고, 그렇다고 팰린드롬을 로그 복잡도로 판별하고 루트 복잡도로 소수임을 판별하자니. 그것도 힘듭니다. 어떻게 하면 좋을까요? 아이디어는 의외로 단순합니다. 일례로 99823419가 소수인지 판단하는 것은 쉽지 않습니다. 그런데, 팰린드롬인지는 어떻게 판정하면 되나요? 그냥 뒤에서 부터 본 문자랑 ..
최근댓글