Lock, mutex, semaphore… what’s the difference?

http://stackoverflow.com/questions/2332765/lock-mutex-semaphore-whats-the-difference

Critical Section= User object used for allowing the execution of just one active thread from many others within one process. The other non selected threads are put to sleep.

Mutex Semaphore (aka Mutex)= Kernel object used for allowing the execution of just one active thread from many others, among different processes. The other non selected threads are put to sleep. This object supports thread ownership, thread termination notification, recursion (multiple ‘acquire’ calls from same thread) and ‘priority inversion avoidance’.

Counting Semaphore (aka Semaphore)= Kernel object used for allowing the execution of a group of active threads from many others. The other non selected threads are put to sleep.

Spin-lock (aka Spinlock)= A lock which uses busy waiting. (The acquiring of the lock is made by xchg or similar atomic operations).

Lamport vs Vector Clock

4 processes (P1, P2, P3, P4) with events a,b,c,d,e,f,g,…

Multiprocess-Events

Lamport Clock Timestamps
https://en.wikipedia.org/wiki/Lamport_timestamps

For each process, p:
    initialize the timestamp, TS = 0;
    on each event, e:
        if e is receiving message m, 
            p.TS = max(m.TS, p.TS);
        p.TS++; 
        e.TS = p.TS;
        if e is sending message m, 
            m.TS = p.TS;

Lamport-Clock-Timestamp

Vector Clock Timestamps
https://en.wikipedia.org/wiki/Vector_clock

For M processes:
    initialize the timestamp, p.VT = (0,0,..,0);
    on each event, e:
        if e is receiving message m, 
            for i=1 to M, 
                p.VT[i] = max(m.VT[I], p.VT[I]);
        p.VT[self]++; 
        e.VT = p.VT;
        if e is sending message m, 
            m.VT = p.VT;

 Vector-Clock-Timestamps

Individual Presentation List (30%)

6/2

강민구 – Midterm (lecture3 & lecture4 & HW5 & Midterm) Blocking vs Non-Blocking TCP & c++/Java ThreadedTCP/UDP

김대섭 – Multi-thread & Process (lecture3 & lecture4 & HW6 & HW7) c++ Application Launcher TCP/UDP/Multicast & Java GUIClient

곽지민 – Multi-thread vs Non-thread (lecture3 & HW2 & HW4) c++ Multithread, Java ThreadTCP/UDP

6/9

문수라 – Mutual Exclusion & Multi-process (lecture5) c++ Thread-Nomutex/Mutex, c++ SharedMemory

안용석 – TCP vs UDP vs Multicast (lecture2 & HW1 & Multicast) c++ TCP/UDP/Multicast

윤대원 – Concurrency & Mutex vs Semaphore (lecture6) c++ SharedMemory/Mutex/Semaphore

이경록 – Distributed System Overview & Bully vs Token Ring Election Algorithm & Lamport vs Vector Clock Synchronization Algorithm (lecture1 & lecture5)

Final Presentation List (20%)

6/16 (20-min presentation)

강민구 – 상호 감시 기반의 온라인 게임 치팅 탐지 방법, 2016

곽지민 – 분살 멀티미디어 프리젠테이션 시스템에서 동기화를 위한 피드백 기법, 2001

김대섭 – 하둡 프레임워크 기반 분산시스템 내의 작은 파일들을 효율적으로 처리하기 위한 방법의 설계, 2015

문수라 – 멀티미디어 스트림 제어 및 관리를 위한 CORBA 기반 분산 멀티미디어 통신 시스템, 2001

안용석 – 분산 멀티미디어 기반의 원격의료시스템 설계 및 구현, 2000

윤대원 – 분산 멀티미디어 스트리밍 서비스를 위한 분할과 사상에 의한 프록시 캐싱 그룹화, 2009

이경록 –

 

동기적 분산 시스템에서 효율적인 조정자 선출 알고리즘, 2015

분산 멀티미디어 응용으로 위한 실시간 동기화 메카니즘, 2000

 

 

HW7

HW7

-ApplicationLauncher-TCP/TCPApplicationLauncherServer/ApplicationLauncherServer.exe 실행

-TCP GUI Client 프로그램 작성 (Java 언어를 사용해서, app-menu.xml 파일을 읽어서, APP 개수만큼 토글 버튼 생성하고, 버튼을 누르면 해당 앱이 실행

-icons.zip 파일안에 이미지 있음

-제출: 소스코드 (반드시 주석처리 요망) 프로젝트 파일 전체 그리고 보고서를 묶어서 제출

app-menu.xml 파일 구조

<?xml version="1.0"?>
<APPLAUNCHER>
   <APP id="1001">
      <NAME>Notepad</NAME>
      <ICON>./icons/notepad.png</ICON>
      <APPLAUNCH_IP>127.0.0.1</APPLAUNCH_IP>
      <APPLAUNCH_PORT>32392</APPLAUNCH_PORT>
      <COMMAND>notepad.exe</COMMAND>
   </APP>
   <APP id="1002">
      <NAME>TCP Server</NAME>
      <ICON>./icons/tcp_server.png</ICON>
      <APPLAUNCH_IP>192.168.0.122</APPLAUNCH_IP>
      <APPLAUNCH_PORT>32392</APPLAUNCH_PORT>
      <COMMAND>D:\MM\courses\KyoungPark-DistributedMultimediaService2016\lab\CPPNetwork\TCP\server\Debug\TCPServerTest.exe 9001</COMMAND>
   </APP>
   <APP id="1003">
      <NAME>TCP Client</NAME>
      <ICON>./icons/tcp_client.png</ICON>
      <APPLAUNCH_IP>192.168.0.122</APPLAUNCH_IP>
      <APPLAUNCH_PORT>32392</APPLAUNCH_PORT>
      <COMMAND>D:\MM\courses\KyoungPark-DistributedMultimediaService2016\lab\CPPNetwork\TCP\client\Debug\TCPClientTest.exe 192.168.0.122 9001</COMMAND>
   </APP>
</APPLAUNCHER>

HW7 AppItemToggleButton 예시

public class AppItemToggleButton extends JToggleButton {
    int id;
    String name;
    String icon;
    String ip;
    int port;
    String command;

    public AppItemToggleButton(int id_) {
        id = id_;
        name = null;
        icon = null;
        ip = null;
        port = 0;
        command = null;
    }
// 중간생략..
}

Thread & Mutex

Thread src based on QUANTA lib

– main process와 thread에서 각각 local variable인 index를 출력함. thread는 순서대로 동작하지 않음.

MULTITHREAD

Thread with No Mutex src based on QUANTA lib

– threadFunc에서 mutex를 사용하지 않고 global variable인 count 를 증가하면서 출력을 했으므로, 정상적인 순서대로 동작하지 않음

thread-nomutex

Thread with Mutex src based on QUANTA lib

–  threadFunc에서 mutex를 사용하여 global variable 인 count  가 정상적으로 증가하면서 출력함

thread-mutex