모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    StackFrame님의
    개인페이지입니다
    가입 : 07-02-08
    방문 : 2553회
    닉네임변경 이력
    회원차단
    회원차단해제
     

    StackFrame님의 댓글입니다.
    번호 제목 댓글날짜 추천/비공감 삭제
    954 272마력 2.0 TDI 디젤엔진, 10단 DSG [새창] 2014-11-16 23:34:13 20 삭제
    11솔직히 이 본문글의 연구비 쳐들여 개발했으며..
    이란 문장과 게시판의 많은 현기 비난 여론이 자연스레 매치되지 않을까요?

    그리고 현까는 왜 나오고 도둑이 제발 저린단 말은 왜 어와요...
    세상엔 현까와 현빠 둘만 존재하지 않아요...
    952 272마력 2.0 TDI 디젤엔진, 10단 DSG [새창] 2014-11-16 22:59:42 15/27 삭제
    디젤엔진은 독일이 최고죠..
    아직 어떤 나라도 따라잡지 못하고 있구요.
    그런곳에서 새로나온, 아직 출시도 안된 엔진스펙을 가지고 타 업체를 욕하는건 아니라고 보네요.
    솔직히 현기는 뒤늦게 시작한거에 비해서 엔진 생각보다 많이 따라온겁니다.
    950 치킨레이스 종결짤 甲 [새창] 2014-11-16 19:40:59 12 삭제
    브레이크 성능 제법이네요.
    949 스r 이 그렇게 별로인가요? [새창] 2014-11-16 19:38:58 0 삭제
    1/스R은 멀티링크 입니다.
    그리고 SUV에 토션빔은 거의 없죠..
    947 자바 질문있습니다. 쓰레드 동기화 관련된 문제입니다. [새창] 2014-10-11 19:35:25 1 삭제
    위 소스는 첫번째로 제시해드린 Payment 메소드 리턴값을 변경하는 방법이고
    (정확히는 acc1을 가지고 다루는 모든 행위, 감소 + 조회 를 하나의 동기화로 묶는 방법)

    다른 방법으론 실제 acc1을 사용하는 곳에서 동기화를 거는 방법 입니다.

    본문의 원본 소스를 기준으로 thread의 run 메소드만 아래와 같이 바꿔 보세요.

    public void run() {
    try{
    while( true ) {
     synchronized (acc1) {
      if( !acc1.Payment(9800) ) {
       break;
      }
      System.out.println(getName() + " 9800원 인출, 남은잔액 : " + acc1.gettot());
     }
     sleep(50);
    }
    }catch(Exception e){
    System.out.println(e);

    }
    }

    차이가 무엇인지, 왜 이런식의 처리를 하는지는 조금만 생각하시면 아실 수 있을 겁니다.
    오타가 있으면 적당히 수정해주세요.
    946 자바 질문있습니다. 쓰레드 동기화 관련된 문제입니다. [새창] 2014-10-11 19:29:45 0 삭제
    질문글에 소스를 작성해 드린적은 거의 없지만 뭔가 열심히 하시는듯 하여 방향만 제시해 드립니다.

    for(int i=0;i<300;i++) {  //while문으로 둬서 출금전에 비교를 함.
       if(acc1.Payment(9800) < 9800) break;
        
       System.out.println(getName() + " 9800원 인출, 남은잔액 : " + acc1.Payment(9800));
       sleep(50);
      }

    이 부분을..

    while(true) {
     int tot = acc1.Payment(9800);
     if( tot < 9800 ) {
      break;
     }
     System.out.println(getName() + " 9800원 인출, 남은잔액 : " + tot);
     sleep(50);
    }

    요렇게 바꿔 보세요.
    왜 그러신진 보시면 아실듯.. 참고로 집에선 일을 안해 개발환경이 없는관계로 브라우져에서 직접 입력하였으니
    오타가 있을 수 있습니다.
    945 자바 질문있습니다. 쓰레드 동기화 관련된 문제입니다. [새창] 2014-10-11 19:00:14 1 삭제
    홍기씨//
    위에 댓글을 적어 드렸는데 이해를 못하신듯 하니 풀어서 설명 드릴께요.
    메소드에 synchronized 가 붙게 되면, 그 메소드가 포함된 클래스로 생성된 인스턴스 단위로 동기화가 발생합니다.
    즉, 위에 acc1.Payment()를 호출하게 되면 나머지 쓰레드들은 해당 메소드가 끝나기전까지 acc1을 억세스하지 못합니다.
    따라서 tot의 감소는 한번에 하나씩 감소하게 됩니다.
    하지만 문제는 tot를 출력하는 부분입니다.

    즉 1번 쓰레드에서 Payment를 호출해 tot를 감소한 후에 acc1.gettot()를 호출해 tot를 얻어와 출력하기 직전에
    다른 2번 쓰레드에서 Payment를 호출하게 되면 어떨까요?
    그리고 1번과 2번 쓰레드가 acc1.gettot()를 호출하기 전까지 다른 쓰레드에서 Payment를 호출하지 않았다면?
    두 쓰레드는 동일한 값을 출력합니다.

    즉 시점이 문제인거예요.
    이건 gettot()를 동기화 한다고 해도 해결되지 않습니다.
    왜냐면 근본적인 acc1에 대한 동기화가 이루어지지 않으니까요.

    해결하는 방법은 간단합니다.
    Payment 메소드가 true, false를 리턴하는것이 아닌 tot값을 리턴하는 것으로 변경한다거나
    Payment를 호출하고 나서 gettot를 호출할때까지를 동기화 블럭으로 묶던가 하는거죠.

    기본적인 기준이 잘못되었으니까요.

    Account내의 동기화는 Account 내부 변수들의 동기화를 위한 처리 이지만,
    그 Account가 외부에서 공유되었다면 이는 처리하는 쪽에서 Account 인스턴스의 동기화 처리를 다시 해주어야 하는것이 맞습니다.
    동기화 해야 하는 대상이 무엇인가? 라는 기본적인 전제를 무시하면 흔히 할 수 있는 실수입니다.
    944 자바 질문있습니다. 쓰레드 동기화 관련된 문제입니다. [새창] 2014-10-11 18:50:49 0 삭제
    하라구//
    말씀하시는 바를 전혀 이해할 수 없네요.
    동기화 라는것이 어떻게 클래스 단위로 발생할 수 있나요?
    어차피 인스턴스 단위로 동기화가 발생합니다.
    acc3, acc4가 만들어진다고 두개가 서로 동기화 되어야 하나요?
    메소드에 암만 synchronized 붙인다고 그게 클래스 단위로 동기화가 되나요?
    어차피 그 인스턴스의 동기화가 발생할 따름 입니다.
    무엇을 말씀하시고자하는지 전혀 이해할 수 없는 댓글 이네요.
    943 ShellShock 셸쇼크! [새창] 2014-10-10 14:19:36 0 삭제
    1-2주 전쯤에 저희 회사도 서버들 긴급패치 하더군요.
    941 자바 질문있습니다. 쓰레드 동기화 관련된 문제입니다. [새창] 2014-10-10 14:05:44 0 삭제
    synchronized에 대한 이해가 없으면 혼동이 올 수 있는 부분이네요.
    위쪽 답변들에 gettot 메소드는 synchronized 되지 않았다..를 문제로 지적하시지만 그건 전혀 문제가 아닙니다.
    기본적으로 메소드에 synchronized가 되면 해당 인스턴스 객체를 기준으로 동기화가 발생합니다.
    따라서 gettot 메소드에 synchronized 를 붙이건 말건 위 결과는 변하지 않습니다.

    위 상황에서 중복이 나오는 이유는 시점이 다르기 때문입니다.
    실제 값이 감소한 시점과 해당 값을 조회하는 시점이 다르기에 Account 클래스의 모든 메소드에 synchronized 를 도배해도 결과는 변하지 않지요.
    위 상황에서 가장 간단하게 해결하는 방법은 Thead 내에서 acc1 을 억세스 하여 출력하는 부분이 동기화블럭을 잡으시면 됩니다.

    즉, 실제 다중 쓰레드에 의해 CRUD가 발생하는 녀석은 tot가 아닌 acc1 이라는 점을 생각하시면
    어디에서 동기화가 이루어져야 하는지 다시 판단하실 수 있을 겁니다.



    [◀이전10개] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [다음10개▶]

     
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈