2016-10-24 6 views
-1

전반적으로 이것은 대학원 수준의 수업을위한 과제물이므로 과제 중 많은 부분이 생략되었지만 제 질문을 분명히하기에 충분하다고 생각합니다. 요컨대, 프롬프트는 아래와 같습니다.스레드 내용의 배치. 스레드의 내부에 무엇이 들어가는 지 어떻게 알 수 있습니까?

프롬프트 :

당신이 파일 세트가 있다고 가정 (file_0 ... file_N) 스레드의 집합에 의해 액세스되는 (thread_0 ... thread_m).
또한 각 파일의 상태를 나타내는 sharedstatus 테이블이 있습니다 (닫힌 상태, 읽기 용으로 열림, 쓰기 용으로 열림). 스레드가 파일에 액세스해야하는 경우 먼저 상태 테이블을 통해 파일의 상태를 확인해야합니다. 다음은 옵션입니다.

파일이 닫히면 즉시 액세스가 허용됩니다.

파일이 쓰기 용으로 열려 있으면 스레드는 해당 파일에 대한 대기열을 대기해야합니다.

파일이 읽기 용으로 열려 있고 새로운 요청도 읽기 용인 경우 해당 파일에 대한 읽기 카운터가 증가되고 액세스 권한이 부여됩니다.

파일이 읽기 용으로 열려 있고 새 요청이 쓰기 용이면 스레드는 해당 파일에 액세스하기위한 대기열에 배치됩니다.

잠금 변수를 사용하여 상태 테이블에 대한 액세스를 동기화하십시오. 상태 테이블은 클래스로 구현되어야합니다. 따라서 스레드는 상태 테이블 을 호출하기 전에 잠금을 얻어야합니다. 실제 상태 테이블은 배열 또는 ArrayList로 구현 될 수 있습니다. 여기서 요소는 단일 파일과 관련된 속성 (상태, 읽기 횟수 등)이있는 객체입니다. 내가 어디가는 것입니다 붙어 어딘지 지금

프롬프트

끝,이 주어진? 최소한 메인, 스레드 테이블 및 스레드 클래스가 필요하다고 분명히 가정합니다. 나는 메인 클린을 유지하는 것을 선호하기 때문에 작업의 주요 부분을 담당하는 네 번째 클래스를 사용하고 단순히 메인을 참조하도록합니다.

주요 질문은 어떻게 구성되어 있습니까? 나는 이것을 여러 번 구조화하려고 노력했으며, 지금까지는 모든 것이 갈등이나 의미가없는 것들을 가져 왔습니다. 현재 반복에는 주 기능 클래스에있는 모든 것이 있지만 스레드는 비어있어 캡슐화 된 변수가있는 하나의 클래스와 내용이있는 클래스를 남겨 둡니다.

더 간결하게, 여기 내 질문이 있습니다.

  • 어디에서 결정 논리가 읽기/쓰기 연산을위한 것입니까? 스레드의 내부 또는 외부?
  • 실제로 파일을 읽는 것이 어디에서 발생합니까? 스레드의 내부 또는 외부?
  • 일반적으로이 유형의 프로그래밍과 관련하여 어떤 스레드가 필요합니까?
  • 정확히 스레드에 넣지 마십시오.
+1

나는 클래스와 스레드라는 두 가지 개념을 혼합 한 느낌이 들었습니다. 그리고 그것이 당신을 혼란스럽게합니다. 먼저, 당신은 먼저 당신의 수업을위한 후보자를 확인하십시오. 즉 : 요구 사항 텍스트에서 엔티티와 그 책임을 식별합니다. 예 : FileInformation을 보유하고있는 "Statustable"- 1 클래스. 그리고 다음 엔티티가 있습니다 : 읽기 카운터, 하나의 특정 파일에 대한 잠금 등을 보유하고있는 FileInformation 클래스 ... 이들은 Statustable 클래스의 ArrayList에 있습니다. 여태까지는 그런대로 잘됐다. 다음은 소비자 (파일에 액세스하려는 엔티티)가 있습니다 ... – Fildor

+0

소비자는 여러 스레드에서 실행될 가능성이 큽니다. 따라서 중요한 리소스 (Statustable)와 동기화해야합니다. – Fildor

+0

그것은 좋은 설명입니다. 이 경우 나는 그것이 동시에 일어날 필요가 있기 때문에 읽기와 쓰기가 모두 스레드에 있어야한다는 것을 가정합니다. – Xenorosth

답변

1

대부분의 경우 수행해야하는 작업은 대부분 ReadWriteLock입니다.

어디에서 결정 논리가 읽기/쓰기 연산을위한 것입니까? 스레드의 내부 또는 외부?

각 스레드는 논리가 스레드에 있거나 (스레드가 사용하는 다른 것을 사용하기 위해) 필요한 자원을 잠그기 위해 잠금을 사용해야합니다.

실제로 파일을 읽는 것이 어디에서 발생합니까? 스레드의 내부 또는 외부?

스레드에서 - 리소스를 잠근 후.

일반적으로이 유형의 프로그래밍과 관련하여 어떤 스레드가 사용됩니까?

만 무슨 일이 속하는 없습니다 - 아무것도 :) 정확히 내가 스레드에

을 넣지 마십시오 무엇?

UI (사용자 인터페이스) 코드.

+0

글쎄,이 프로그램에 대한 질문입니다. 거기에 속한 것은 무엇입니까? 더 구체적으로 말하자면,이 프로그램에서 스레드에 무엇이 있어야하고 스레드가 없어야하는지 어떻게 알 수 있습니까? 스레드의 내용이 실제로 무엇인지 파악할 수 없습니다. – Xenorosth

+0

"스레드의 내용"이 없습니다. 동시에 실행될 코드 만 있습니다. 공유 자원의 코드는 해당 스레드에서 실행되지만 동시에 다른 스레드에서만 실행됩니다 (동시에는 아니지만). – Fildor

+0

그래서 설명을 요구하면 스레드에 있어야하는 것이 동시에 실행된다는 것입니까? – Xenorosth