SlideShare a Scribd company logo
1 of 27
Download to read offline
L p trình trên Windows

                       L p trình đa ti u trình
                   Multi-Threaded Programming
                                                       Nguy n Tri Tu n
                                                       Khoa CNTT – ĐH.KHTN.Tp.HCM
                                                       Email: nttuan@ fit.hcmuns.edu.vn




                                            N i dung



    M t s khái ni m cơ b n


    Xây d ng m t ng d ng đa ti u trình


    Đ ng b hóa



C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                      Winter 2007     2




                                                                                              1
M t s khái ni m cơ b n
    X lý đ ng hành (Concurrent Processing)
    Đa nhi m (Multi-Tasking)
    Ti n trình (Process)
    Ti u trình (Thread)
    Đ ưu tiên c a ti n trình (Process priority
    class)
    Đ ưu tiên c a ti u trình (Thread priority)
    Chuy n đ i ng c nh (Context Switch)


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM             Winter 2007   3




    M t s khái ni m cơ b n - X lý đ ng hành
    X lý đ ng hành ?
         Bài toán: kq = a*b + c*d

                   x1 = a*b
                   x2 = c*d                            x1 = a*b x2 = c*d
              kq = x1 + x2                               kq = x1 + x2
                   X lý tu n t                           X lý đ ng hành
    M t h th ng x lý đ ng hành thư ng có nhi u
    ti n trình th c thi cùng lúc
    Các ti n trình có th ho t đ ng đ c l p hay k t
    h p v i nhau đ th c hi n nhi u tác v

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM             Winter 2007   4




                                                                                   2
M t s khái ni m cơ b n - X lý đ ng hành…(tt)
    L i ích c a x lý đ ng hành
         Cho phép nhi u ng d ng ho t đ ng cùng lúc
         Tăng t c đ x lý
         Tăng hi u su t s d ng CPU
         …




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   5




           M t s khái ni m cơ b n – Đa nhi m
    H đi u hành đa nhi m phân chia th i gian x lý c a
    CPU thành nhi u “lát th i gian” (time slice) đ các ti n
    trình/ti u trình th c hi n luân phiên
    Ti n trình/ti u trình đang th c thi s t m d ng khi time
    slice c a nó h t và ti n trình/ti u trình khác s ch y
    Khi h th ng chuy n đ i t thread này sang thread
    khác, nó s lưu l i ng c nh c a thread b m t quy n
    và ph c h i ng c nh c a thread s p đư c ch y
    Đ dài time slice ph thu c t ng h đi u hành và b vi
    x lý. B i vì time slice khá nh (kho ng 20ms) nên ta
    có c m giác th c hi n đ ng th i
    H đi u hành Windows h tr pre-emptive Multi-
    Tasking (đa nhi m có đ ưu tiên)
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   6




                                                                         3
M t s khái ni m cơ b n – Đa nhi m…(tt)
    Nh ng v n đ khó khăn khi x lý đa nhi m
     Không gian b nh đ lưu tr thông tin
     ng c nh c a ti n trình và ti u trình
     Th i gian đ theo v t, qu n lý các ti u
     trình
     S tranh ch p tài nguyên dùng chung




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   7




            M t s khái ni m cơ b n – Ti n trình
    Là m t chương trình đang th c thi

    Có m t con tr l nh, vùng không gian đ a ch
     o riêng, mã l nh, d li u, object handles,
    các bi n môi trư ng, đ ưu tiên…

    Các thu c tính này tác đ ng lên m i ti u
    trình tr c thu c ti n trình

    M t ti n trình có th có nhi u ti u trình

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   8




                                                                         4
M t s khái ni m cơ b n – Ti n trình…(tt)

         PROCESS
                 Heap                    Code            D li u,          Ng
                                                         handles        c nh/Đ
                                                                         ưu tiên


                 User Stack                User Stack               User Stack
                Kernel Stack              Kernel Stack             Kernel Stack


                   Ng c nh                   Ng c nh                Ng c nh

                   Thread 1                   Thread 2              Thread n


                               C u t o c a 1 process
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                 Winter 2007    9




            M t s khái ni m cơ b n – Ti u trình
    Là đơn v nh nh t th c thi đư c trên h
    đi u hành Windows 32 bits
    Là đơn v x lý mà h đi u hành Windows
    phân chia time slice
    M i ti u trình bao g m các stack, tr ng thái
    các thanh ghi CPU,… và m t entry trên danh
    sách các ti u trình c a h th ng đi u ph i
    Các ti u trình chia s ngu n tài nguyên
    chung c a toàn b ti n trình


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                 Winter 2007   10




                                                                                        5
M t s khái ni m cơ b n – Đ ưu tiên c a ti n trình


    Đ ưu tiên là thu c tính giúp h đi u hành xác đ nh
    ti u trình nào s đư c th c hi n ti p theo, đ ng
    th i phân chia th i gian x lý c a CPU

    Khi th i đi m context switch đ n, Windows
    dispatcher kh o sát t p các ti u trình tr ng thái
    s n sàng và ch n ti u trình đ u tiên có đ ưu tiên
    cao nh t trên hàng đ i đ th c hi n




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   11




 M t s khái ni m cơ b n – Đ ưu tiên c a ti n trình…(tt)
    M i ti n trình có th có đ ưu tiên khác nhau
         IDLE_PRIORITY_CLASS: ch đư c th c hi n khi không còn
         ti n trình nào s d ng CPU
         NORMAL_PRIORITY_CLASS: đư c quy n s d ng CPU theo
         th i gian phân chia. Đây là đ ưu tiên m c đ nh cho ti n trình
         khi m i t o l p
         HIGH_PRIORITY_CLASS: Ti n trình đư c dành quy n s
         d ng CPU t các ti n trình thu c l p Normal ngay khi c n
         REALTIME_PRIORITY_CLASS: Có đ ưu tiên cao nh t,
         đư c s d ng CPU b t kỳ lúc nào
         ABOVE_NORMAL_PRIORITY_CLASS (ch có trong Windows
         2000 tr lên): cao hơn NORMAL nhưng th p hơn HIGH
         priority
         BELOW_NORMAL_PRIORITY_CLASS (ch có trong Windows
         2000 tr lên): cao hơn IDLE nhưng th p hơn NORMAL
         priority

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   12




                                                                          6
M t s khái ni m cơ b n – Đ ưu tiên c a ti n trình…(tt)
    Dùng hàm SetPriorityClass đ thay đ i đ ưu
    tiên cho ti n trình
    VD. Thay            ñ i ñ ưu tiên c a ti n trình
    DWORD               errorCode;
    HANDLE              hProcess;
    BOOL                nStatus;

    hProcess = GetCurrentProcess();
    nStatus = SetPriorityClass(hProcess,
                             HIGH_PRIORITY_CLASS);
    if (nStatus == 0) {
       errorCode = GetLastError();
    }


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   13




  M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình
    M i ti u trình có 1 đ ưu tiên đư c xác l p
    t 0 (th p nh t) đ n 31 (cao nh t), giá tr này
    g i là Base Priority
    Base Priority là giá tr đ ưu tiên c a ti u
    trình tính trên toàn h th ng
    Base Priority đư c xác đ nh b i:
         Đ ưu tiên c a ti n trình ch a nó
         M c đ ưu tiên c a ti u trình bên trong ti n trình




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   14




                                                                          7
M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)
    M c đ ưu tiên c a ti u trình bên trong ti n trình
    có th là 1 trong các giá tr sau:
           THREAD_PRIORITY_IDLE (-4): th p hơn 4 đi m so v i
           đ ưu tiên NORMAL
           THREAD_PRIORITY_ABOVE_IDLE (-3): th p hơn 3 đi m
           so v i đ ưu tiên NORMAL
           THREAD_PRIORITY_LOWEST (-2): th p hơn 2 đi m so
           v i đ ưu tiên NORMAL
           THREAD_PRIORITY_BELOW_NORMAL (-1): th p hơn 1
           đi m so v i đ ưu tiên NORMAL
           THREAD_PRIORITY_NORMAL: đ ưu tiên ngang v i đ ưu
           tiên c a ti n trình
           THREAD_PRIORITY_ABOVE_NORMAL (+1): cao hơn 1
           đi m so v i đ ưu tiên NORMAL
           THREAD_PRIORITY_HIGHEST (+2): cao hơn 2 đi m so
           v i đ ưu tiên NORMAL
           THREAD_PRIORITY_TIME_CRITICAL (+3): cao hơn 3
           đi m so v i đ ưu tiên NORMAL
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   15




 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)

Base        Process Priority Class                     Thread Priority Level
Priority
    1       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_IDLE

    1       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_IDLE

    1       NORMAL_PRIORITY_CLASS                      THREAD_PRIORITY_IDLE

    1       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_IDLE

    1       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_IDLE

    2       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_LOWEST

    3       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_BELOW_NORMAL

    4       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_NORMAL

    4       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_LOWEST

    5       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_ABOVE_NORMAL



C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   16




                                                                                       8
M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)

Base        Process Priority Class                     Thread Priority Level
Priority
    5       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_BELOW_NORMAL
    5       Background                                 THREAD_PRIORITY_LOWEST
            NORMAL_PRIORITY_CLASS
    6       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_HIGHEST
    6       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_NORMAL
    6       Background                                 THREAD_PRIORITY_BELOW_NORMAL
            NORMAL_PRIORITY_CLASS
    7       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_ABOVE_NORMAL
    7       Background                                 THREAD_PRIORITY_NORMAL
            NORMAL_PRIORITY_CLASS
    7       Foreground                                 THREAD_PRIORITY_LOWEST
            NORMAL_PRIORITY_CLASS
    8       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_HIGHEST
    8       NORMAL_PRIORITY_CLASS                      THREAD_PRIORITY_ABOVE_NORMAL


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   17




 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)

Base        Process Priority Class                     Thread Priority Level
Priority
    8       Foreground                                 THREAD_PRIORITY_BELOW_NORMAL
            NORMAL_PRIORITY_CLASS
    8       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_LOWEST
    9       NORMAL_PRIORITY_CLASS                      THREAD_PRIORITY_HIGHEST
    9       Foreground                                 THREAD_PRIORITY_NORMAL
            NORMAL_PRIORITY_CLASS
    9       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_BELOW_NORMAL
   10       Foreground                                 THREAD_PRIORITY_ABOVE_NORMAL
            NORMAL_PRIORITY_CLASS
   10       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_NORMAL
   11       Foreground                                 THREAD_PRIORITY_HIGHEST
            NORMAL_PRIORITY_CLASS
   11       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_ABOVE_NORMAL
   11       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_LOWEST


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   18




                                                                                       9
M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)

Base        Process Priority Class                     Thread Priority Level
Priority
   12       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_HIGHEST

   12       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_BELOW_NORMAL

   12       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_NORMAL

   14       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_ABOVE_NORMAL

   15       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_HIGHEST

   15       HIGH_PRIORITY_CLASS                        THREAD_PRIORITY_TIME_CRITICAL

   15       IDLE_PRIORITY_CLASS                        THREAD_PRIORITY_TIME_CRITICAL

   15       BELOW_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_TIME_CRITICAL

   15       NORMAL_PRIORITY_CLASS                      THREAD_PRIORITY_TIME_CRITICAL

   15       ABOVE_NORMAL_PRIORITY_CLASS                THREAD_PRIORITY_TIME_CRITICAL



C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   19




 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)

Base        Process Priority Class                     Thread Priority Level
Priority
   16       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_IDLE

   17       REALTIME_PRIORITY_CLASS                    -7

   18       REALTIME_PRIORITY_CLASS                    -6

   19       REALTIME_PRIORITY_CLASS                    -5

   20       REALTIME_PRIORITY_CLASS                    -4

   21       REALTIME_PRIORITY_CLASS                    -3

   22       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_LOWEST

   23       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_BELOW_NORMAL

   24       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_NORMAL



C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   20




                                                                                       10
M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)

Base        Process Priority Class                     Thread Priority Level
Priority
   25       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_ABOVE_NORMAL

   26       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_HIGHEST

   27       REALTIME_PRIORITY_CLASS                    3

   28       REALTIME_PRIORITY_CLASS                    4

   29       REALTIME_PRIORITY_CLASS                    5

   30       REALTIME_PRIORITY_CLASS                    6

   31       REALTIME_PRIORITY_CLASS                    THREAD_PRIORITY_TIME_CRITICAL




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   21




 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)
    Theo m c đ nh m t ti u trình v a m i đư c t o ra s có đ
    ưu tiên THREAD_PRIORITY_NORMAL
    Ta có th xác đ nh đ ưu tiên c a ti u trình b ng cách g i
    hàm GetThreadPriority

    VD. Ki m tra ñ ưu tiên c a ti u trình
    int       threadPriority;
    DWORD     errorCode;
    HANDLE    hThread;

    hThread = GetCurrentThread();
    threadPriority = GetThreadPriority(hThread);
    if (threadPriority == THREAD_PRIORITY_ERROR_RETURN)
    {
        errorCode = GetLastError();
        ...
    }
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                Winter 2007   22




                                                                                       11
M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt)
      ng d ng có th tăng hay gi m ưu tiên c a ti u trình b ng
    cách g i hàm SetThreadPriority
    VD. Thay ñ i ñ ưu tiên c a 1 ti u trình
    DWORD     errorCode;
    HANDLE    hThread;
    BOOL      nStatus;
    hThread = GetCurrentThread();
    nStatus = SetThreadPriority(hThread,
                                THREAD_PRIORITY_HIGHEST);
    if (nStatus == 0) {
        errorCode = GetLastError();
        ...
    }
    else {
        // Th c hi n vài vi c   ưu tiên cao
        ...
    }
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   23




    M t s khái ni m cơ b n – Chuy n đ i ng c nh
    Đ chuy n đ i x lý t ti u trình này sang ti u
    trình khác trong hàng đ i, h th ng ph i th c
    hi n vi c chuy n đ i ng c nh:
         Sao lưu ng c nh c a ti u trình t m ngưng x lý.
         Đưa ti u trình này vào hàng đ i h th ng có đ ưu
         tiên tương ng v i đ ưu tiên x lý c a ti u trình.
         Xác đ nh ti u trình s n sàng trong hàng đ i có đ
         ưu tiên x lý cao nh t.
         N p thông tin ng c nh c a ti u trình đư c ch n
         vào h th ng, xoá b ti u trình này trong hàng đ i
         h th ng và th c thi ti u trình này.


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   24




                                                                          12
M t s khái ni m cơ b n – Chuy n đ i ng c nh…(tt)

    Vi c chuy n đ i ng c nh ch đư c th c
    hi n trong ba tình hu ng:
         Khi th i gian x lý c a m t ti u trình đã h t.
         Khi ti u trình đang x lý ph i chuy n sang tr ng
         thái ch , nó ph i t b th i gian x lý còn l i.
         M t ti u trình có đ ưu tiên x lý cao hơn v a t
         tr ng thái ch (block, suspend) chuy n sang
         tr ng thái s n sàng.




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   25




           Xây d ng m t ng d ng đa ti u trình


    T o l p ti u trình

    Thay đ i tr ng thái c a ti u trình

    K t thúc ti u trình




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   26




                                                                          13
Xây d ng ng d ng đa ti u trình - T o l p ti u trình
    Thông thư ng, ch có 1 ti u trình duy nh t trong
    m t ti n trình lúc b t đ u
    T ti u trình ban đ u này, ta có th t o ra các ti u
    trình khác b ng cách g i hàm CreateThread.
    Hàm này đư c đ nh nghĩa như sau:
    HANDLE CreateThread(
      LPSECURITY_ATTRIBUTES lpThreadAttributes,
      SIZE_T dwStackSize,
      LPTHREAD_START_ROUTINE lpStartAddress,
      LPVOID lpParameter, DWORD dwCreationFlags,
      LPDWORD lpThreadId);


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   27




Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt)
VD. T o m i ti u trình: kích thư c stack m c ñ nh, hàm
  ThreadFunc là hàm b t ñ u th c thi c a ti u trình,
  myData là d li u riêng ñư c g i ñ n ti u trình, ti u
  trình th c thi ngay sau khi t o
HANDLE      hThread;
DWORD       errorCode;

hThread = CreateThread(NULL, 0,
            (LPTHREAD_START_ROUTINE) ThreadFunc,
            (LPVOID) &myData, 0, 0);

if (hThread == 0)
{
  errorCode = GetLastError();
  // X lý l i, n u có
}
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   28




                                                                          14
Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt)
    Hàm b t đ u th c thi c a ti u trình (ThreadProc)
    có d ng chung như sau:
    DWORD WINAPI ThreadProc(LPVOID lpParameter);
    Thông thư ng, ti u trình đư c t o s có đ ưu tiên
    m c đ nh là THREAD_PRIORITY_NORMAL
    Ta có th dùng các hàm GetThreadPriority và
    SetThreadPriority đ thay đ i đ ưu tiên c a
    ti u trình
    S lư ng ti u trình đư c t o ra tùy thu c vào kích
    thư c stack.
    N u m i ti u trình dùng 1MB stack, ta có th t o ta
    max. 32 ti u trình
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   29




Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt)
VD. T o 1 ti u trình, hi n th câu thông báo
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
   MessageBox(NULL, (LPSTR) lpParam, "ThreadFunc", MB_OK);
   return 0;
}
...
HANDLE hThread;
char   szMsg[] = “This message is displayed in thread”;
DWORD errorCode;
hThread = CreateThread(NULL, 0,
            (LPTHREAD_START_ROUTINE) ThreadFunc,
            (LPVOID) szMsg, 0, 0);
if (hThread == 0)
{
  errorCode = GetLastError();
  // X lý l i, n u có
}
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   30




                                                                          15
Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt)
    M t hàm khác đ t o ra ti u trình là
    CreateRemoteThread
    Hàm này t o ra m t ti u trình ch y                                        không gian
    đ a ch o c a m t ti n trình khác
    HANDLE CreateRemoteThread(
      HANDLE hProcess, // Ti n trình ch a ti u
                       // trình ñư c t o
      LPSECURITY_ATTRIBUTES lpThreadAttributes,
      SIZE_T dwStackSize,
      LPTHREAD_START_ROUTINE lpStartAddress,
      LPVOID lpParameter, DWORD dwCreationFlags,
      LPDWORD lpThreadId);

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                         Winter 2007               31




Xây d ng ng d ng … - Thay đ i tr ng thái c a ti u trình
    RUNNABLE
                         Pick to run              Standby               Context Switch




                            Ready                                     Running
                                                  Preempted




    Resource                           Unblock/Resume       Block/Suspend                  Terminate
    Available                          Resource Available


        Transition                                Waiting                            Terminated
                            Unblock
                            Resource
                            not Available

    NOT RUNNABLE

                         Các tr ng thái ho t đ ng c a 1 ti u trình
C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM                         Winter 2007               32




                                                                                                            16
Xây d ng ng d ng … - Thay đ i tr ng thái c a ti u trình…(tt)

    Ta có th t m ngưng th c thi m t ti u trình b ng
    cách g i hàm SuspendThread và khôi ph c l i
    ho t đ ng b ng hàm ResumeThread
      DWORD SuspendThread(HANDLE hThread);
      DWORD ResumeThread(HANDLE hThread);
    K t qu tr v là Suspend-Count, bi n đ m s l n
    suspend trư c đó
         M i l n g i SuspendThread s làm tăng giá tr c a
         Suspend-Count lên 1; và ngư c l i v i hàm
         ResumeThread
         N u như Suspend-Count v n còn l n hơn 0 thì ti u trình
         v n còn b t m d ng


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   33




Xây d ng ng d ng … - Thay đ i tr ng thái c a ti u trình…(tt)

    N u ti u trình đang g i các hàm h th ng,
    thao tác suspend s th t b i
      ng d ng có th ph i g i SuspendThread
    nhi u l n cho đ n khi suspend thành công

    VD. G i hàm ResumeThread cho ñ n khi
    ti u trình ñư c khôi ph c
    while (ResumeThread(hThread));




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   34




                                                                          17
Xây d ng ng d ng đa ti u trình - K t thúc ti u trình
    M t ti u trình có th k t thúc vi c th c thi
    c a chính nó b ng cách g i hàm
    ExitThread
    VOID ExitThread(DWORD dwExitCode);

    Sau khi g i hàm này, ti u trình k t thúc và
    quay tr v th t c kh i t o ti u trình

    Windows khuy n cáo nên dùng hàm
    ExitThread đ k t thúc m t ti u trình

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   35




Xây d ng ng d ng đa ti u trình - K t thúc ti u trình…(tt)
    Ngoài ra, b t c ti u trình nào trong ti n trình đ u có
    th k t thúc chính nó ho c ti u trình khác trong cùng
    ti n trình b ng cách g i hàm TerminateThread
      BOOL TerminateThread(
         HANDLE hThread,    // handle c a ti u
                            // trình c n k t thúc
         DWORD dwExitCode   // mã k t thúc
      );
    Khi s d ng hàm TerminateThread, ti u trình đích
    s đư c k t thúc ngay l p t c và không c n đi u ki n,
    và không có cơ h i đ gi i phóng tài nguyên
    Hàm TerminateThread r t nguy hi m và ch nên s
    d ng trong nh ng tình hu ng th t s kh n c p

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   36




                                                                          18
Xây d ng ng d ng đa ti u trình - K t thúc ti u trình…(tt)

    Vì ti u trình tr c thu c ti n trình, nên ta có
    th k t thúc t t c các ti u trình b ng cách
    k t thúc ti n trình cha
      VOID ExitProcess(UINT uExitCode);
      BOOL TerminateProcess(HANDLE hProcess,
                             UINT uExitCode);




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   37




                  Đ ng b hóa (Synchronization)


    T ng quan

    Các đ i tư ng đ ng b (Synchronization
    Objects)

    Các hàm ch (Wait Functions)




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   38




                                                                          19
Đ ng b hóa – T ng quan
    T i sao l i s d ng đ ng b hóa ?
         Tranh ch p CPU và tài nguyên gi a các ti u
         trình
         T c đ x lý c a các ti u trình khác nhau (do đ
         ph c t p c a thu t toán, t c đ truy xu t trên b
         nh ph ,…) d n đ n k t qu c n thi t cho bư c
         x lý ti p theo chưa đ y đ




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   39




                  Đ ng b hóa – T ng quan…(tt)
    B n ch t c a vi c đ ng b hoá ?
         Đ đ m b o không có s tranh ch p tài nguyên
         gi a các ti u trình
         Đ đ m b o các đo n code “ph thu c l n
         nhau” đư c th c hi n đúng trình t




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   40




                                                                          20
Đ ng b hóa – T ng quan…(tt)
    Các thành ph n c n thi t cho vi c đ ng b
    hoá:
         Đ i tư ng đ ng b (Synchronization Object)
         Hàm ch (Wait function)




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   41




   Các đ i tư ng đ ng b (Synchronization Objects)
    Đ nh nghĩa:
         Là m t đ i tư ng mà handle (c a nó) đư c s
         d ng như tham s truy n vào cho wait function
         đ ph i h p ho t đ ng c a các ti u trình
         Các đ i tư ng đ ng b có 2 tr ng thái: s n sàng
         s d ng (signaled) và đang đư c s d ng (not
         signaled)




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   42




                                                                          21
Các đ i tư ng đ ng b hóa…(tt)
    Các đ i tư ng đ ng b bao g m:
         Event
         Mutex
         Semaphore
         Waitable timer




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   43




                Các đ i tư ng đ ng b hóa…(tt)
    Mutex (“mutual exclusion”)
         Không cho phép dùng chung
         Tr ng thái:
               signaled (owned)
               not-signaled (not-owned)
         Các hàm liên quan:
               CreateMutex
               ReleaseMutex
               OpenMutex




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   44




                                                                          22
Các đ i tư ng đ ng b hóa…(tt)
    Semaphore
         Cho phép m t s xác đ nh các thread đư c truy xu t
         đ ng hành critical section
         Bi n count: xác đ nh s lư ng t i đa các truy xu t
         cho phép. Khi m t thread “wait” semaphore thành
         công   count s gi m đi 1. Khi count b ng 0, thread
         s b block cho đ n khi có thread gi i phóng
         semaphore (hàm ReleaseSemaphore)
         Semaphore v i count t i đa b ng 1 đư c g i là
         semaphore nh phân (binary semaphore)       gi ng
         như mutex
         Các hàm liên quan:
               CreateSemaphore
               ReleaseSemaphore


C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   45




                   Các hàm ch (Wait Functions)
    Đ nh nghĩa:
         Dùng đ “khoá” (block) ho t đ ng c a ti u trình
         Hàm ch s không “tr v ” (return), cho đ n khi
         nào đi u ki n đư c tho

         Khi ti u trình g i hàm ch , có 2 kh năng có th
         x y ra:
               N u đi u ki n không tho , ti u trình rơi vào tr ng thái
               “ch ”
               Khi đi u ki n tho , ti u trình ti p t c th c hi n



C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   46




                                                                          23
Các hàm ch (Wait Functions) …(tt)
    Các hàm ch bao g m:
         Nhóm Single-Object
         Nhóm Multi-Object
         Nhóm Alertable
         Nhóm Registered




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   47




            Các hàm ch (Wait Functions) …(tt)
    Nhóm Single-object Wait Functions:
         SignalObjectAndWait
         WaitForSingleObject
         WaitForSingleObjectEx

         Đ u yêu c u truy n vào handle c a m t đ i
         tư ng đ ng b
         K t thúc khi:
               Đ i tư ng đ ng b có tr ng thái s n sàng s d ng
               (signaled); hay
               Đã đ i h t th i gian time-out

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   48




                                                                          24
Nhóm Single-object Wait Functions
      Ví d .
      // T o ñ i tư ng ñ ng b
      char    szMutexName[] = “MyMutex";
      HANDLE hMutex = CreateMutex(NULL, FALSE,
                                  szMutexName);
      if (hMutex == NULL) {
        // X lý l i
        ...
      }
      ...




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   49




       Nhóm Single-object Wait Functions…(tt)

     // Ch ñ i tư ng Mutex, timeout = 1000
    if (WaitForSingleObject(hMutex, 1000)!=0) {
        // X lý l i timeout
        ...
    }
    else     {
        // B t ñ u critical section
        ...
        ReleaseMutex(hMutex); // gi i phóng mutex
        // K t thúc critical section
    }

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   50




                                                                          25
Các hàm ch (Wait Functions) …(tt)
    Nhóm Multiple-object Wait Functions:
         WaitForMultipleObjects
         WaitForMultipleObjectsEx
         MsgWaitForMultipleObjects
         MsgWaitForMultipleObjectsEx

         Cho phép ch đ nh m t m ng ch a m t ho c
         nhi u handle c a các đ i tư ng đ ng b
         K t thúc khi:
               M t (hay t t c ) đ i tư ng đ ng b có tr ng thái s n
               sàng s d ng (signaled); hay
               Đã đ i h t th i gian time-out

C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   51




           Nhóm Multiple-object Wait Functions
Ví d .
// t o các ti u trình
for (i=0; i<NUM_THREADS; i++)
{
  ThreadHandle[i] = CreateThread(NULL, 0,
           (LPTHREAD_START_ROUTINE)CountThread,
           (LPVOID) n, 0, &ThreadID);
}
// ch t t c các ti u trình k t thúc x lý
Status = WaitForMultipleObjects(NUM_THREADS,
           ThreadHandle, TRUE, INFINITE);




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   52




                                                                          26
Cám ơn - H i & Đáp




C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM   Winter 2007   53




                                                                          27

More Related Content

Viewers also liked

PSY708-PSYCHOLOGY OF DIVERSITY-FINAL
PSY708-PSYCHOLOGY OF DIVERSITY-FINALPSY708-PSYCHOLOGY OF DIVERSITY-FINAL
PSY708-PSYCHOLOGY OF DIVERSITY-FINALKim Talia Pillay
 
Newsletter 1.ºano mandato
Newsletter 1.ºano mandatoNewsletter 1.ºano mandato
Newsletter 1.ºano mandatojsdgolega
 
4d. telling about accidents moving violations and car accidents (1)
4d. telling about accidents   moving violations and car accidents (1)4d. telling about accidents   moving violations and car accidents (1)
4d. telling about accidents moving violations and car accidents (1)Sarah Weston
 
Well come to greenext international
Well come to greenext internationalWell come to greenext international
Well come to greenext internationalarieldkonslet
 
Lehman Brothers
Lehman Brothers Lehman Brothers
Lehman Brothers Leon Liang
 
Presentacion actual _pei_tvg
Presentacion actual _pei_tvgPresentacion actual _pei_tvg
Presentacion actual _pei_tvgJuan Core
 
Tt nov28 dec4
Tt nov28 dec4Tt nov28 dec4
Tt nov28 dec4typctc
 
设计模式浅析
设计模式浅析设计模式浅析
设计模式浅析Xcat Liu
 
Announcements, 11/27/11
Announcements, 11/27/11Announcements, 11/27/11
Announcements, 11/27/11CLADSM
 
Keresés a Google-n kívül
Keresés a Google-n kívülKeresés a Google-n kívül
Keresés a Google-n kívülEndre Jofoldi
 
사업소개서
사업소개서사업소개서
사업소개서leeseho
 
Безопасность энергоблоков Ривненской АЭС
Безопасность  энергоблоков  Ривненской АЭСБезопасность  энергоблоков  Ривненской АЭС
Безопасность энергоблоков Ривненской АЭСUA-Energy.org, DiXi Group
 
eXperience cu eResearch - a very useful tool for online research
eXperience cu eResearch - a very useful tool for online researcheXperience cu eResearch - a very useful tool for online research
eXperience cu eResearch - a very useful tool for online researcheResearchCorp
 
Advent eso-2011
Advent eso-2011Advent eso-2011
Advent eso-2011Xaviglesia
 
La acentuación
La acentuaciónLa acentuación
La acentuaciónfgmezlpez
 
2010年“便民热线”年度推广方案v1(终稿)
2010年“便民热线”年度推广方案v1(终稿)2010年“便民热线”年度推广方案v1(终稿)
2010年“便民热线”年度推广方案v1(终稿)yaoyao yang
 

Viewers also liked (18)

PSY708-PSYCHOLOGY OF DIVERSITY-FINAL
PSY708-PSYCHOLOGY OF DIVERSITY-FINALPSY708-PSYCHOLOGY OF DIVERSITY-FINAL
PSY708-PSYCHOLOGY OF DIVERSITY-FINAL
 
Newsletter 1.ºano mandato
Newsletter 1.ºano mandatoNewsletter 1.ºano mandato
Newsletter 1.ºano mandato
 
4d. telling about accidents moving violations and car accidents (1)
4d. telling about accidents   moving violations and car accidents (1)4d. telling about accidents   moving violations and car accidents (1)
4d. telling about accidents moving violations and car accidents (1)
 
Well come to greenext international
Well come to greenext internationalWell come to greenext international
Well come to greenext international
 
Lehman Brothers
Lehman Brothers Lehman Brothers
Lehman Brothers
 
Presentacion actual _pei_tvg
Presentacion actual _pei_tvgPresentacion actual _pei_tvg
Presentacion actual _pei_tvg
 
Tt nov28 dec4
Tt nov28 dec4Tt nov28 dec4
Tt nov28 dec4
 
设计模式浅析
设计模式浅析设计模式浅析
设计模式浅析
 
Announcements, 11/27/11
Announcements, 11/27/11Announcements, 11/27/11
Announcements, 11/27/11
 
Temperature Transmitters
Temperature TransmittersTemperature Transmitters
Temperature Transmitters
 
Keresés a Google-n kívül
Keresés a Google-n kívülKeresés a Google-n kívül
Keresés a Google-n kívül
 
사업소개서
사업소개서사업소개서
사업소개서
 
Безопасность энергоблоков Ривненской АЭС
Безопасность  энергоблоков  Ривненской АЭСБезопасность  энергоблоков  Ривненской АЭС
Безопасность энергоблоков Ривненской АЭС
 
eXperience cu eResearch - a very useful tool for online research
eXperience cu eResearch - a very useful tool for online researcheXperience cu eResearch - a very useful tool for online research
eXperience cu eResearch - a very useful tool for online research
 
KU7 | peppinasuutarinen_1
KU7 | peppinasuutarinen_1KU7 | peppinasuutarinen_1
KU7 | peppinasuutarinen_1
 
Advent eso-2011
Advent eso-2011Advent eso-2011
Advent eso-2011
 
La acentuación
La acentuaciónLa acentuación
La acentuación
 
2010年“便民热线”年度推广方案v1(终稿)
2010年“便民热线”年度推广方案v1(终稿)2010年“便民热线”年度推广方案v1(终稿)
2010年“便民热线”年度推广方案v1(终稿)
 

Similar to Chuong 8 -_multi-thread

Gioi thieu va cac lenh tren console
Gioi thieu va cac lenh tren consoleGioi thieu va cac lenh tren console
Gioi thieu va cac lenh tren consoleVan Pham
 
Luận Văn Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.doc
Luận Văn  Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.docLuận Văn  Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.doc
Luận Văn Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.docsividocz
 
Giao trinhgiaithuat04
Giao trinhgiaithuat04Giao trinhgiaithuat04
Giao trinhgiaithuat04Phi Phi
 
Bai giang hẹ dieu hanh mon tin hoc dai cuong-12.ppt
Bai giang hẹ dieu hanh mon tin hoc dai cuong-12.pptBai giang hẹ dieu hanh mon tin hoc dai cuong-12.ppt
Bai giang hẹ dieu hanh mon tin hoc dai cuong-12.pptssuserbf2656
 
Luận Văn Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
Luận Văn  Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...Luận Văn  Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
Luận Văn Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...sividocz
 
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]bookbooming1
 

Similar to Chuong 8 -_multi-thread (13)

Gioi thieu va cac lenh tren console
Gioi thieu va cac lenh tren consoleGioi thieu va cac lenh tren console
Gioi thieu va cac lenh tren console
 
Chc6b0c6a1ng 12
Chc6b0c6a1ng 12Chc6b0c6a1ng 12
Chc6b0c6a1ng 12
 
Chc6b0c6a1ng 12
Chc6b0c6a1ng 12Chc6b0c6a1ng 12
Chc6b0c6a1ng 12
 
Luận Văn Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.doc
Luận Văn  Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.docLuận Văn  Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.doc
Luận Văn Đề Cương Công Nghệ Thông Tin Nguyên Lý Hệ Điều Hành.doc
 
Quan ly bo nho
Quan ly bo nhoQuan ly bo nho
Quan ly bo nho
 
Giao trinhgiaithuat04
Giao trinhgiaithuat04Giao trinhgiaithuat04
Giao trinhgiaithuat04
 
Bai giang hẹ dieu hanh mon tin hoc dai cuong-12.ppt
Bai giang hẹ dieu hanh mon tin hoc dai cuong-12.pptBai giang hẹ dieu hanh mon tin hoc dai cuong-12.ppt
Bai giang hẹ dieu hanh mon tin hoc dai cuong-12.ppt
 
Luận Văn Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
Luận Văn  Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...Luận Văn  Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
Luận Văn Đề Cương Dùng Cho Ngành Công Nghệ Thông Tin Cấu Trúc Dữ Liệu Và Giả...
 
Se01b
Se01bSe01b
Se01b
 
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
 
Nghiên Cứu Nhiễu Loạn Điện Áp Trong Lưới Điện Phân Phối.doc
Nghiên Cứu Nhiễu Loạn Điện Áp Trong Lưới Điện Phân Phối.docNghiên Cứu Nhiễu Loạn Điện Áp Trong Lưới Điện Phân Phối.doc
Nghiên Cứu Nhiễu Loạn Điện Áp Trong Lưới Điện Phân Phối.doc
 
Giải Pháp Điều Khiển Cung Cấp Tài Nguyên Cho Hệ Phân Tán Trong Máy Ảo Dựa Trê...
Giải Pháp Điều Khiển Cung Cấp Tài Nguyên Cho Hệ Phân Tán Trong Máy Ảo Dựa Trê...Giải Pháp Điều Khiển Cung Cấp Tài Nguyên Cho Hệ Phân Tán Trong Máy Ảo Dựa Trê...
Giải Pháp Điều Khiển Cung Cấp Tài Nguyên Cho Hệ Phân Tán Trong Máy Ảo Dựa Trê...
 
--De cuong on tap hdh
 --De cuong on tap hdh --De cuong on tap hdh
--De cuong on tap hdh
 

Chuong 8 -_multi-thread

  • 1. L p trình trên Windows L p trình đa ti u trình Multi-Threaded Programming Nguy n Tri Tu n Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn N i dung M t s khái ni m cơ b n Xây d ng m t ng d ng đa ti u trình Đ ng b hóa C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 2 1
  • 2. M t s khái ni m cơ b n X lý đ ng hành (Concurrent Processing) Đa nhi m (Multi-Tasking) Ti n trình (Process) Ti u trình (Thread) Đ ưu tiên c a ti n trình (Process priority class) Đ ưu tiên c a ti u trình (Thread priority) Chuy n đ i ng c nh (Context Switch) C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 3 M t s khái ni m cơ b n - X lý đ ng hành X lý đ ng hành ? Bài toán: kq = a*b + c*d x1 = a*b x2 = c*d x1 = a*b x2 = c*d kq = x1 + x2 kq = x1 + x2 X lý tu n t X lý đ ng hành M t h th ng x lý đ ng hành thư ng có nhi u ti n trình th c thi cùng lúc Các ti n trình có th ho t đ ng đ c l p hay k t h p v i nhau đ th c hi n nhi u tác v C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 4 2
  • 3. M t s khái ni m cơ b n - X lý đ ng hành…(tt) L i ích c a x lý đ ng hành Cho phép nhi u ng d ng ho t đ ng cùng lúc Tăng t c đ x lý Tăng hi u su t s d ng CPU … C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 5 M t s khái ni m cơ b n – Đa nhi m H đi u hành đa nhi m phân chia th i gian x lý c a CPU thành nhi u “lát th i gian” (time slice) đ các ti n trình/ti u trình th c hi n luân phiên Ti n trình/ti u trình đang th c thi s t m d ng khi time slice c a nó h t và ti n trình/ti u trình khác s ch y Khi h th ng chuy n đ i t thread này sang thread khác, nó s lưu l i ng c nh c a thread b m t quy n và ph c h i ng c nh c a thread s p đư c ch y Đ dài time slice ph thu c t ng h đi u hành và b vi x lý. B i vì time slice khá nh (kho ng 20ms) nên ta có c m giác th c hi n đ ng th i H đi u hành Windows h tr pre-emptive Multi- Tasking (đa nhi m có đ ưu tiên) C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 6 3
  • 4. M t s khái ni m cơ b n – Đa nhi m…(tt) Nh ng v n đ khó khăn khi x lý đa nhi m Không gian b nh đ lưu tr thông tin ng c nh c a ti n trình và ti u trình Th i gian đ theo v t, qu n lý các ti u trình S tranh ch p tài nguyên dùng chung C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 7 M t s khái ni m cơ b n – Ti n trình Là m t chương trình đang th c thi Có m t con tr l nh, vùng không gian đ a ch o riêng, mã l nh, d li u, object handles, các bi n môi trư ng, đ ưu tiên… Các thu c tính này tác đ ng lên m i ti u trình tr c thu c ti n trình M t ti n trình có th có nhi u ti u trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 8 4
  • 5. M t s khái ni m cơ b n – Ti n trình…(tt) PROCESS Heap Code D li u, Ng handles c nh/Đ ưu tiên User Stack User Stack User Stack Kernel Stack Kernel Stack Kernel Stack Ng c nh Ng c nh Ng c nh Thread 1 Thread 2 Thread n C u t o c a 1 process C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 9 M t s khái ni m cơ b n – Ti u trình Là đơn v nh nh t th c thi đư c trên h đi u hành Windows 32 bits Là đơn v x lý mà h đi u hành Windows phân chia time slice M i ti u trình bao g m các stack, tr ng thái các thanh ghi CPU,… và m t entry trên danh sách các ti u trình c a h th ng đi u ph i Các ti u trình chia s ngu n tài nguyên chung c a toàn b ti n trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 10 5
  • 6. M t s khái ni m cơ b n – Đ ưu tiên c a ti n trình Đ ưu tiên là thu c tính giúp h đi u hành xác đ nh ti u trình nào s đư c th c hi n ti p theo, đ ng th i phân chia th i gian x lý c a CPU Khi th i đi m context switch đ n, Windows dispatcher kh o sát t p các ti u trình tr ng thái s n sàng và ch n ti u trình đ u tiên có đ ưu tiên cao nh t trên hàng đ i đ th c hi n C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 11 M t s khái ni m cơ b n – Đ ưu tiên c a ti n trình…(tt) M i ti n trình có th có đ ưu tiên khác nhau IDLE_PRIORITY_CLASS: ch đư c th c hi n khi không còn ti n trình nào s d ng CPU NORMAL_PRIORITY_CLASS: đư c quy n s d ng CPU theo th i gian phân chia. Đây là đ ưu tiên m c đ nh cho ti n trình khi m i t o l p HIGH_PRIORITY_CLASS: Ti n trình đư c dành quy n s d ng CPU t các ti n trình thu c l p Normal ngay khi c n REALTIME_PRIORITY_CLASS: Có đ ưu tiên cao nh t, đư c s d ng CPU b t kỳ lúc nào ABOVE_NORMAL_PRIORITY_CLASS (ch có trong Windows 2000 tr lên): cao hơn NORMAL nhưng th p hơn HIGH priority BELOW_NORMAL_PRIORITY_CLASS (ch có trong Windows 2000 tr lên): cao hơn IDLE nhưng th p hơn NORMAL priority C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 12 6
  • 7. M t s khái ni m cơ b n – Đ ưu tiên c a ti n trình…(tt) Dùng hàm SetPriorityClass đ thay đ i đ ưu tiên cho ti n trình VD. Thay ñ i ñ ưu tiên c a ti n trình DWORD errorCode; HANDLE hProcess; BOOL nStatus; hProcess = GetCurrentProcess(); nStatus = SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS); if (nStatus == 0) { errorCode = GetLastError(); } C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 13 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình M i ti u trình có 1 đ ưu tiên đư c xác l p t 0 (th p nh t) đ n 31 (cao nh t), giá tr này g i là Base Priority Base Priority là giá tr đ ưu tiên c a ti u trình tính trên toàn h th ng Base Priority đư c xác đ nh b i: Đ ưu tiên c a ti n trình ch a nó M c đ ưu tiên c a ti u trình bên trong ti n trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 14 7
  • 8. M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) M c đ ưu tiên c a ti u trình bên trong ti n trình có th là 1 trong các giá tr sau: THREAD_PRIORITY_IDLE (-4): th p hơn 4 đi m so v i đ ưu tiên NORMAL THREAD_PRIORITY_ABOVE_IDLE (-3): th p hơn 3 đi m so v i đ ưu tiên NORMAL THREAD_PRIORITY_LOWEST (-2): th p hơn 2 đi m so v i đ ưu tiên NORMAL THREAD_PRIORITY_BELOW_NORMAL (-1): th p hơn 1 đi m so v i đ ưu tiên NORMAL THREAD_PRIORITY_NORMAL: đ ưu tiên ngang v i đ ưu tiên c a ti n trình THREAD_PRIORITY_ABOVE_NORMAL (+1): cao hơn 1 đi m so v i đ ưu tiên NORMAL THREAD_PRIORITY_HIGHEST (+2): cao hơn 2 đi m so v i đ ưu tiên NORMAL THREAD_PRIORITY_TIME_CRITICAL (+3): cao hơn 3 đi m so v i đ ưu tiên NORMAL C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 15 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Base Process Priority Class Thread Priority Level Priority 1 IDLE_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1 HIGH_PRIORITY_CLASS THREAD_PRIORITY_IDLE 2 IDLE_PRIORITY_CLASS THREAD_PRIORITY_LOWEST 3 IDLE_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL 4 IDLE_PRIORITY_CLASS THREAD_PRIORITY_NORMAL 4 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_LOWEST 5 IDLE_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 16 8
  • 9. M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Base Process Priority Class Thread Priority Level Priority 5 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL 5 Background THREAD_PRIORITY_LOWEST NORMAL_PRIORITY_CLASS 6 IDLE_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST 6 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_NORMAL 6 Background THREAD_PRIORITY_BELOW_NORMAL NORMAL_PRIORITY_CLASS 7 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL 7 Background THREAD_PRIORITY_NORMAL NORMAL_PRIORITY_CLASS 7 Foreground THREAD_PRIORITY_LOWEST NORMAL_PRIORITY_CLASS 8 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST 8 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 17 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Base Process Priority Class Thread Priority Level Priority 8 Foreground THREAD_PRIORITY_BELOW_NORMAL NORMAL_PRIORITY_CLASS 8 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_LOWEST 9 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST 9 Foreground THREAD_PRIORITY_NORMAL NORMAL_PRIORITY_CLASS 9 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL 10 Foreground THREAD_PRIORITY_ABOVE_NORMAL NORMAL_PRIORITY_CLASS 10 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_NORMAL 11 Foreground THREAD_PRIORITY_HIGHEST NORMAL_PRIORITY_CLASS 11 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL 11 HIGH_PRIORITY_CLASS THREAD_PRIORITY_LOWEST C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 18 9
  • 10. M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Base Process Priority Class Thread Priority Level Priority 12 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST 12 HIGH_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL 12 HIGH_PRIORITY_CLASS THREAD_PRIORITY_NORMAL 14 HIGH_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL 15 HIGH_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST 15 HIGH_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL 15 IDLE_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL 15 BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL 15 NORMAL_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL 15 ABOVE_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 19 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Base Process Priority Class Thread Priority Level Priority 16 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_IDLE 17 REALTIME_PRIORITY_CLASS -7 18 REALTIME_PRIORITY_CLASS -6 19 REALTIME_PRIORITY_CLASS -5 20 REALTIME_PRIORITY_CLASS -4 21 REALTIME_PRIORITY_CLASS -3 22 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_LOWEST 23 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_BELOW_NORMAL 24 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_NORMAL C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 20 10
  • 11. M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Base Process Priority Class Thread Priority Level Priority 25 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_ABOVE_NORMAL 26 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_HIGHEST 27 REALTIME_PRIORITY_CLASS 3 28 REALTIME_PRIORITY_CLASS 4 29 REALTIME_PRIORITY_CLASS 5 30 REALTIME_PRIORITY_CLASS 6 31 REALTIME_PRIORITY_CLASS THREAD_PRIORITY_TIME_CRITICAL C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 21 M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) Theo m c đ nh m t ti u trình v a m i đư c t o ra s có đ ưu tiên THREAD_PRIORITY_NORMAL Ta có th xác đ nh đ ưu tiên c a ti u trình b ng cách g i hàm GetThreadPriority VD. Ki m tra ñ ưu tiên c a ti u trình int threadPriority; DWORD errorCode; HANDLE hThread; hThread = GetCurrentThread(); threadPriority = GetThreadPriority(hThread); if (threadPriority == THREAD_PRIORITY_ERROR_RETURN) { errorCode = GetLastError(); ... } C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 22 11
  • 12. M t s khái ni m cơ b n – Đ ưu tiên c a ti u trình…(tt) ng d ng có th tăng hay gi m ưu tiên c a ti u trình b ng cách g i hàm SetThreadPriority VD. Thay ñ i ñ ưu tiên c a 1 ti u trình DWORD errorCode; HANDLE hThread; BOOL nStatus; hThread = GetCurrentThread(); nStatus = SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST); if (nStatus == 0) { errorCode = GetLastError(); ... } else { // Th c hi n vài vi c ưu tiên cao ... } C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 23 M t s khái ni m cơ b n – Chuy n đ i ng c nh Đ chuy n đ i x lý t ti u trình này sang ti u trình khác trong hàng đ i, h th ng ph i th c hi n vi c chuy n đ i ng c nh: Sao lưu ng c nh c a ti u trình t m ngưng x lý. Đưa ti u trình này vào hàng đ i h th ng có đ ưu tiên tương ng v i đ ưu tiên x lý c a ti u trình. Xác đ nh ti u trình s n sàng trong hàng đ i có đ ưu tiên x lý cao nh t. N p thông tin ng c nh c a ti u trình đư c ch n vào h th ng, xoá b ti u trình này trong hàng đ i h th ng và th c thi ti u trình này. C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 24 12
  • 13. M t s khái ni m cơ b n – Chuy n đ i ng c nh…(tt) Vi c chuy n đ i ng c nh ch đư c th c hi n trong ba tình hu ng: Khi th i gian x lý c a m t ti u trình đã h t. Khi ti u trình đang x lý ph i chuy n sang tr ng thái ch , nó ph i t b th i gian x lý còn l i. M t ti u trình có đ ưu tiên x lý cao hơn v a t tr ng thái ch (block, suspend) chuy n sang tr ng thái s n sàng. C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 25 Xây d ng m t ng d ng đa ti u trình T o l p ti u trình Thay đ i tr ng thái c a ti u trình K t thúc ti u trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 26 13
  • 14. Xây d ng ng d ng đa ti u trình - T o l p ti u trình Thông thư ng, ch có 1 ti u trình duy nh t trong m t ti n trình lúc b t đ u T ti u trình ban đ u này, ta có th t o ra các ti u trình khác b ng cách g i hàm CreateThread. Hàm này đư c đ nh nghĩa như sau: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 27 Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt) VD. T o m i ti u trình: kích thư c stack m c ñ nh, hàm ThreadFunc là hàm b t ñ u th c thi c a ti u trình, myData là d li u riêng ñư c g i ñ n ti u trình, ti u trình th c thi ngay sau khi t o HANDLE hThread; DWORD errorCode; hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc, (LPVOID) &myData, 0, 0); if (hThread == 0) { errorCode = GetLastError(); // X lý l i, n u có } C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 28 14
  • 15. Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt) Hàm b t đ u th c thi c a ti u trình (ThreadProc) có d ng chung như sau: DWORD WINAPI ThreadProc(LPVOID lpParameter); Thông thư ng, ti u trình đư c t o s có đ ưu tiên m c đ nh là THREAD_PRIORITY_NORMAL Ta có th dùng các hàm GetThreadPriority và SetThreadPriority đ thay đ i đ ưu tiên c a ti u trình S lư ng ti u trình đư c t o ra tùy thu c vào kích thư c stack. N u m i ti u trình dùng 1MB stack, ta có th t o ta max. 32 ti u trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 29 Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt) VD. T o 1 ti u trình, hi n th câu thông báo DWORD WINAPI ThreadFunc(LPVOID lpParam) { MessageBox(NULL, (LPSTR) lpParam, "ThreadFunc", MB_OK); return 0; } ... HANDLE hThread; char szMsg[] = “This message is displayed in thread”; DWORD errorCode; hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc, (LPVOID) szMsg, 0, 0); if (hThread == 0) { errorCode = GetLastError(); // X lý l i, n u có } C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 30 15
  • 16. Xây d ng ng d ng đa ti u trình - T o l p ti u trình…(tt) M t hàm khác đ t o ra ti u trình là CreateRemoteThread Hàm này t o ra m t ti u trình ch y không gian đ a ch o c a m t ti n trình khác HANDLE CreateRemoteThread( HANDLE hProcess, // Ti n trình ch a ti u // trình ñư c t o LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 31 Xây d ng ng d ng … - Thay đ i tr ng thái c a ti u trình RUNNABLE Pick to run Standby Context Switch Ready Running Preempted Resource Unblock/Resume Block/Suspend Terminate Available Resource Available Transition Waiting Terminated Unblock Resource not Available NOT RUNNABLE Các tr ng thái ho t đ ng c a 1 ti u trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 32 16
  • 17. Xây d ng ng d ng … - Thay đ i tr ng thái c a ti u trình…(tt) Ta có th t m ngưng th c thi m t ti u trình b ng cách g i hàm SuspendThread và khôi ph c l i ho t đ ng b ng hàm ResumeThread DWORD SuspendThread(HANDLE hThread); DWORD ResumeThread(HANDLE hThread); K t qu tr v là Suspend-Count, bi n đ m s l n suspend trư c đó M i l n g i SuspendThread s làm tăng giá tr c a Suspend-Count lên 1; và ngư c l i v i hàm ResumeThread N u như Suspend-Count v n còn l n hơn 0 thì ti u trình v n còn b t m d ng C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 33 Xây d ng ng d ng … - Thay đ i tr ng thái c a ti u trình…(tt) N u ti u trình đang g i các hàm h th ng, thao tác suspend s th t b i ng d ng có th ph i g i SuspendThread nhi u l n cho đ n khi suspend thành công VD. G i hàm ResumeThread cho ñ n khi ti u trình ñư c khôi ph c while (ResumeThread(hThread)); C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 34 17
  • 18. Xây d ng ng d ng đa ti u trình - K t thúc ti u trình M t ti u trình có th k t thúc vi c th c thi c a chính nó b ng cách g i hàm ExitThread VOID ExitThread(DWORD dwExitCode); Sau khi g i hàm này, ti u trình k t thúc và quay tr v th t c kh i t o ti u trình Windows khuy n cáo nên dùng hàm ExitThread đ k t thúc m t ti u trình C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 35 Xây d ng ng d ng đa ti u trình - K t thúc ti u trình…(tt) Ngoài ra, b t c ti u trình nào trong ti n trình đ u có th k t thúc chính nó ho c ti u trình khác trong cùng ti n trình b ng cách g i hàm TerminateThread BOOL TerminateThread( HANDLE hThread, // handle c a ti u // trình c n k t thúc DWORD dwExitCode // mã k t thúc ); Khi s d ng hàm TerminateThread, ti u trình đích s đư c k t thúc ngay l p t c và không c n đi u ki n, và không có cơ h i đ gi i phóng tài nguyên Hàm TerminateThread r t nguy hi m và ch nên s d ng trong nh ng tình hu ng th t s kh n c p C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 36 18
  • 19. Xây d ng ng d ng đa ti u trình - K t thúc ti u trình…(tt) Vì ti u trình tr c thu c ti n trình, nên ta có th k t thúc t t c các ti u trình b ng cách k t thúc ti n trình cha VOID ExitProcess(UINT uExitCode); BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode); C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 37 Đ ng b hóa (Synchronization) T ng quan Các đ i tư ng đ ng b (Synchronization Objects) Các hàm ch (Wait Functions) C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 38 19
  • 20. Đ ng b hóa – T ng quan T i sao l i s d ng đ ng b hóa ? Tranh ch p CPU và tài nguyên gi a các ti u trình T c đ x lý c a các ti u trình khác nhau (do đ ph c t p c a thu t toán, t c đ truy xu t trên b nh ph ,…) d n đ n k t qu c n thi t cho bư c x lý ti p theo chưa đ y đ C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 39 Đ ng b hóa – T ng quan…(tt) B n ch t c a vi c đ ng b hoá ? Đ đ m b o không có s tranh ch p tài nguyên gi a các ti u trình Đ đ m b o các đo n code “ph thu c l n nhau” đư c th c hi n đúng trình t C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 40 20
  • 21. Đ ng b hóa – T ng quan…(tt) Các thành ph n c n thi t cho vi c đ ng b hoá: Đ i tư ng đ ng b (Synchronization Object) Hàm ch (Wait function) C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 41 Các đ i tư ng đ ng b (Synchronization Objects) Đ nh nghĩa: Là m t đ i tư ng mà handle (c a nó) đư c s d ng như tham s truy n vào cho wait function đ ph i h p ho t đ ng c a các ti u trình Các đ i tư ng đ ng b có 2 tr ng thái: s n sàng s d ng (signaled) và đang đư c s d ng (not signaled) C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 42 21
  • 22. Các đ i tư ng đ ng b hóa…(tt) Các đ i tư ng đ ng b bao g m: Event Mutex Semaphore Waitable timer C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 43 Các đ i tư ng đ ng b hóa…(tt) Mutex (“mutual exclusion”) Không cho phép dùng chung Tr ng thái: signaled (owned) not-signaled (not-owned) Các hàm liên quan: CreateMutex ReleaseMutex OpenMutex C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 44 22
  • 23. Các đ i tư ng đ ng b hóa…(tt) Semaphore Cho phép m t s xác đ nh các thread đư c truy xu t đ ng hành critical section Bi n count: xác đ nh s lư ng t i đa các truy xu t cho phép. Khi m t thread “wait” semaphore thành công count s gi m đi 1. Khi count b ng 0, thread s b block cho đ n khi có thread gi i phóng semaphore (hàm ReleaseSemaphore) Semaphore v i count t i đa b ng 1 đư c g i là semaphore nh phân (binary semaphore) gi ng như mutex Các hàm liên quan: CreateSemaphore ReleaseSemaphore C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 45 Các hàm ch (Wait Functions) Đ nh nghĩa: Dùng đ “khoá” (block) ho t đ ng c a ti u trình Hàm ch s không “tr v ” (return), cho đ n khi nào đi u ki n đư c tho Khi ti u trình g i hàm ch , có 2 kh năng có th x y ra: N u đi u ki n không tho , ti u trình rơi vào tr ng thái “ch ” Khi đi u ki n tho , ti u trình ti p t c th c hi n C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 46 23
  • 24. Các hàm ch (Wait Functions) …(tt) Các hàm ch bao g m: Nhóm Single-Object Nhóm Multi-Object Nhóm Alertable Nhóm Registered C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 47 Các hàm ch (Wait Functions) …(tt) Nhóm Single-object Wait Functions: SignalObjectAndWait WaitForSingleObject WaitForSingleObjectEx Đ u yêu c u truy n vào handle c a m t đ i tư ng đ ng b K t thúc khi: Đ i tư ng đ ng b có tr ng thái s n sàng s d ng (signaled); hay Đã đ i h t th i gian time-out C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 48 24
  • 25. Nhóm Single-object Wait Functions Ví d . // T o ñ i tư ng ñ ng b char szMutexName[] = “MyMutex"; HANDLE hMutex = CreateMutex(NULL, FALSE, szMutexName); if (hMutex == NULL) { // X lý l i ... } ... C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 49 Nhóm Single-object Wait Functions…(tt) // Ch ñ i tư ng Mutex, timeout = 1000 if (WaitForSingleObject(hMutex, 1000)!=0) { // X lý l i timeout ... } else { // B t ñ u critical section ... ReleaseMutex(hMutex); // gi i phóng mutex // K t thúc critical section } C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 50 25
  • 26. Các hàm ch (Wait Functions) …(tt) Nhóm Multiple-object Wait Functions: WaitForMultipleObjects WaitForMultipleObjectsEx MsgWaitForMultipleObjects MsgWaitForMultipleObjectsEx Cho phép ch đ nh m t m ng ch a m t ho c nhi u handle c a các đ i tư ng đ ng b K t thúc khi: M t (hay t t c ) đ i tư ng đ ng b có tr ng thái s n sàng s d ng (signaled); hay Đã đ i h t th i gian time-out C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 51 Nhóm Multiple-object Wait Functions Ví d . // t o các ti u trình for (i=0; i<NUM_THREADS; i++) { ThreadHandle[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CountThread, (LPVOID) n, 0, &ThreadID); } // ch t t c các ti u trình k t thúc x lý Status = WaitForMultipleObjects(NUM_THREADS, ThreadHandle, TRUE, INFINITE); C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 52 26
  • 27. Cám ơn - H i & Đáp C4W - MultiThread - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2007 53 27