Reader-Writer Problem

Reader-Writer Problem using Semaphore

Reader() { // multiple readers can read the data at the same time when there is no writer

P(rmutex); // lock for nreaders
nreaders++; // # of reader count increase
if (nreaders == 1) P(rwmutex); // if there is the first reader, lock writer mutex (reader들이 읽는 동안 writer는 접근 못하도록)
V(rmutex); // unlock for nreaders

<<< critical section: Read data  >>> reader들은 writer가 사용하지 않을시 동시에 여러 개가 접근 가능

P(rmutex); // lock for nreaders
nreaders–; // # of reader count decrease
if (nreaders == 0) P(rwmutex); // if there is no reader, unlock writer mutex (reader가 더이상 없으면 writer가 접근 가능하도록)

V(rmutex); // unlock for nreaders

}

Writer() { // only one writer can write data at a time when there is no reader

P(rwmutex); // lock writer mutex

<<< critical section: Writer data >>>writer는 reader가 사용하지 않을시 한번에 하나씩 접근 가능

V(rwmutex); // unlock for writer mutex
}

Producer-Consumer Problem

Producer-Consumer Problem using Semaphore

Producer() {

put(item) {

P(empty); // for wait, Get an empty count, block if unavailable
P(mutex); // lock critical section: shared buffer
<<< critical section: Put item into shared buffer >>>
V(mutex); // unlock critical section
V(full); // for signal, increase number of full count

}

}

Consumer() {

take () {

P(full); // for wait, Get a full count, block if unavailable
P(mutex);
<<< critical section: Take item from shared buffer >>>
V(mutex);
V(empty); // for signal, increase number of empty count
return item;

}

}

Producer-Consumer Problem using Monitor

Producer() {

synchronized put(item) {

while(count >= buffer.length) { wait(); } // wait if buffer is full
count++
<<< critical section: Put iteminto shared buffer >>>
notifyAll(); // signal

}

}

Consumer() {

synchronized take () {

while(count <=0) { wait(); } // wait if buffer is empty
count- –
<<< critical section: Take itemfrom shared buffer >>>
notifyAll(); // signal
return item;

}

}

HW4

HW4 (Due extended by 12/13 23:00) 프린트는 수업시간에 제출
1. thread-cpp11-boundedbuffer test report
-윈도우,리눅스에서 실행해서 테스트해본다.
-코드 분석 및 실행 결과 리포트

2. multithread-java-ProducerConsumerCondition vs multithread-java-ProducerConsumerSemaphore vs multithread-java-ProducerConsumerMonitor test report
-윈도우,리눅스에서 실행해서 테스트해본다.
-코드 분석 및 실행 결과 리포트

3. multithread-cpp-synchronized WOEID (c++)
-WOEIDLIST1.csv~WOEIDLIST3.csv 파일을 각각 다른 쓰레드에서 로딩해서 하나의 매니저에 데이타 추가(Insert)후 출력(Print) 및 검색(Query)

4. Insert & Query synchronized data via ThreadedTCP (c++)
-WOEIDLIST1.csv~WOEIDLIST3.csv 파일을 각각 다른 클라이언트에서 서버로 데이터를 하나씩 보내서 서버 매니저에 데이타 추가(Insert)후 검색(Query)
-c/c++ 버전 (Windows와 Linux)으로 작성
-서버는 Threaded TCP & synchronized data manager 사용
-4개의 클라이언트는 각각 다른 파일(WOEIDLIST1.csv~WOEIDLIST3.csv)을 로딩하여 하나씩 Woeid 데이터 입력 메시지(INSERT id,city,country,latitute,longitude)를 전송(send) 하여 서버에서 새로운 데이터 insert 후 회신받음(receive)
-또한 클라이언트는 Woeid 데이터 검색 메시지(QUERY Seoul)를 전송(send)하여 서버 매니저에서 검색한 결과 Woeid 데이터를 회신받음(receive)
-또한 클라이언트는 전체리스트출력 메시지(PRINT)를 전송(send)하여 서버 매니저에서 리스틀 전체 출력하고 회신 받음(receive)

5. 자바로 서버를 실행하고 c/c++ 버전의 여러개 클라이언트를 연결하여 Insert & Query & Print 테스트한다.
반대로 c/c++ 버전으로 서버를 실행하고 자바버전의 여러개 클라이언트를 연결하여 Insert & Query & Print 테스트한다.

Message: INSERT 2487956,San Francisco,United States,37.747398,-122.439217
Message: QUERY San Francisco
Message: PRINT