어떤 프로그램이 있다.
이 프로그램은 1초마다 데이터를 수신하는 통신스레드와 10초마다 데이터를 저장하는 저장스레드로 구성된다.
하는일은 수신된 값을 누적하는 버퍼가 있고 그 버퍼를 저장 스레드가 읽고 저장하고 0으로 초기화 한다.
근데 문제가 발생한다. 데이터의 저장과 데이터의 수신이 동시에 발생하면 정상적으로 0으로 초기화 되지 않는다.
데이터 저장에는 2초 이상 10초 미만이 소요될수 있으므로 두개의 스레드를 단순히 동기화 시키기 어렵다.
해결책을 구하시오
싫읍니다
야 숙제를 여기다 올리면 어떡해
어디서 공짜로 주워쳐먹을라고 병신같은새퀴가
나 학생 아니다.
그래 그럼 니 업무를 여기다 올리면 어떡해
나는 이 문제를 해결했고 너같은 새싹들이 한번 생각해 볼만한 문제라고 여겨서 올려봤다.
ㅊㅋ
무슨 용도에 쓰는건질 알아야 적합한 해결책을 강구해보지 저장이 바로바로 필요한거냐 아니면 천천히 해도되냐 이런거에 따라 나뉘것지
데이터 저장하는 구간까지 동기화 시킬 필요는 없고 가져올때만 동기화하면되지
인터락도 안 걸었노
일반적인 락을 걸면 저장 스레드가 종료할때까지 통신스레드는 정지 상태로 있게 된다 그것은 안됨
그래서 해결책은 저장할 데이터의 사본을 만들고 이 사본을 만드는 과정에만 락을 거는것으로 해결함//
복사하는데 시간도 안 걸릴거면 큐를 따로 짜던가
더미써. 저장하기전에 더미에 카피하고 다시 버퍼 비워. 이거 기본이잖나