E D R , A S I H C RSS

쓰레드�관한잡담

process scheduling� �게 �가지로 나뉜다.
1. real-time process - 1.hard real-time(산업용), 2.soft real-time(vedio decoder 등)
2. time-sharing process


여기서 time-sharing � 설명한다.
Linux�서는 �게 �가지� thread를 지�한다.
1. Kernel - 1. Kernel Thread, 2. LWT(Lightweight Thread)
2. User Thread


thread를 사용할때 중요한것� �기화��, context switch를 할 때 ��터가 저장� 안� �태�서 다른 thread로 우선순위가 넘어가면 치명�� 오류가 나게�다.
Linuxì—�서 멀티 프로세스 ê°œë…�ì�¸ fork()는 ë‚´ë¶€ì �으로 do_fork()란 Kernel 함수를 호ìœí•˜ë©°, do_fork()는 ë‚´ë¶€ì �으로 user threadì�¸ POSIX기반ì�˜ Mutex를 사용한다.


... 그리고... 한가지... POSIX thread를 사용하여 많� 양� thread를 �성하면 �기화를 주목해야한다.
설계가 관건�다. 설계를 잘해야한다. 사소한 실수�� 하면 ��다.
... mutex �기화... 미치겠군... ��터를 수정할때는 lock� 걸 수 있는� 변수 초기화때 context switch가 �어나면 어쩌�는거�.



여담으로... context switch시 PCB(Process Control Block)� 정보가 저장�다.
�것� Assembly어로 짜여지며 그 �유는 �� 때문�다.
PCB� 저장� 양� �어야 process간 전환� 빠르다.
-> 만약 Zombie Process가 �성�면 시스템 ��� 먹지는 않지만 PCB가 좀비프로세스� 리턴 값으로 늘어나 시스템� 전반�으로 �려진다.

~cpp 
void *thread(void *arg)
{
        int num = *(int *)arg;
        int i;

        for(i=1; i<=20; i++){
                pthread_mutex_lock(&mutex);
                printf("%d: sum+=%d\n", num, i);
                sum += i;
                sleep(1);
                pthread_mutex_unlock(&mutex);
        }
}

thread를 10개 �성 시키고 � 작업� 수행하면,
함수가 실행�고 context switch가 �어나고 arg가 제대로 안바뀌는 것 같다.
arg는 0~9까지가 아닌 몇몇� 중복�는 수로 나타나게 �다.

pthread_mutex_lock� 변수 앞� 걸어주면 arg는 0으로 채워지게�다.
아�까지 �� 중�지만 pthread� 내부� 문제�것 같다.
명확한 지�� 있기전까진 arg� 값� 믿� 수 없다. ��.

Critical Section� 아닌�� ��터가 제대로 바뀌지 않는다.
��하다. 소스�는 문제�� 없지만 약간 많� 쓰레드가 �시� �성�고 ��터 처리 양� 많� 때�는
argument가 제대로 넘겨지지 않는 것 같다.
function� argument를 넘기는 것� stack� 관계� 것�고, 개개� 쓰레드는 ��� stack� 가지고 있���. 아� ��중�다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:19
Processing time 0.0049 sec