Giáo trình Lập trình An toàn - Chương 3: Kiểm soát xung đột  Synchronization Technique - Lương Ánh Hoàng
          
        
            
            
              
            
 
            
                
                    Event dùng đồng bộ hoạt động của các luồng thông qua cơ chế báo 
hiệu. 
§  Sử dụng 
§  Khai báo: HANDLE hEvent; 
§  Khởi tạo: hMutex = CreateEvent(NULL, TRUE, FALSE, “MyEvent”) 
§  Sử dụng 
WaitForSingleObject(hEvent, INFINITE) 
// 
SetEvent(hEvent) 
ResetEvent(hEvent) 
// // Báo hiệu các luồng khác
// Chặn các luồng khác
CloseHandle(hEvent) 
§  Ví dụ 
3.5 Event
                
              
                                            
                                
            
 
            
                 9 trang
9 trang | 
Chia sẻ: huongthu9 | Lượt xem: 874 | Lượt tải: 0 
              
            Bạn đang xem nội dung tài liệu Giáo trình Lập trình An toàn - Chương 3: Kiểm soát xung đột  Synchronization Technique - Lương Ánh Hoàng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lương	
  Ánh	
  Hoàng	
  
hoangla@soict.hut.edu.vn	
  
Chương	
  3.	
  Kiểm	
  soát	
  xung	
  đột	
  
Synchronization	
  Technique	
  
3.1	
  Khái	
  niệm	
  3.2	
  Đoạn	
  găng	
  (Critical	
  Section).	
  3.3	
  Đèn	
  hiệu	
  (Semaphore)	
  	
  3.4	
  Mutex	
  3.5	
  Event	
  3.6	
  SRW	
  Lock	
  
Nội	
  dung	
  
47	
  
§  Xung	
  đột	
  là	
  vấn	
  đề	
  phát	
  sinh	
  khi	
  nhiều	
  luồng	
  của	
  chương	
  trình	
  chạy	
  trên	
  bộ	
  vi	
  xử	
  lý	
  đa	
  nhân	
  cùng	
  truy	
  nhập	
  một	
  tài	
  nguyên	
  hệ	
  thống.	
  
§  Ví	
  dụ	
  
3.1	
  Khái	
  niệm	
  
48	
  
int	
  x	
  =	
  0;	
  
DWORD 	
  WINAPI	
  Thread(LPVOID	
  	
  lpParam)	
  
{	
  
	
  for	
  (int	
  i=0;i<2000000;i++)	
  x++;	
  
	
  return	
  0;	
  
}	
  
int	
  _tmain(int	
  argc,	
  _TCHAR*	
  argv[])	
  
{	
  
	
  HANDLE	
  hThread1	
  =	
  CreateThread(NULL,NULL,Thread,NULL,NULL,NULL);	
  
	
  HANDLE	
  hThread2	
  =	
  CreateThread(NULL,NULL,Thread,NULL,NULL,NULL);	
  
	
  WaitForSingleObject(hThread1,INFINITE);	
  
	
  WaitForSingleObject(hThread2,INFINITE);	
  
	
  printf("X=%d",x);	
  
	
  getch();	
  
	
  return	
  0;	
  
}	
  
§  Đoạn	
  găng	
  (Critical	
  Section)	
  là	
  đoạn	
  chương	
  trình	
  được	
  bảo	
  vệ	
  bởi	
  hệ	
  điều	
  hành	
  sao	
  cho	
  tại	
  mọi	
  thời	
  điểm	
  chỉ	
  có	
  một	
  luồng	
  được	
  phép	
  thực	
  thi.	
  
§  Sử	
  dụng	
  
§  Khai	
  báo:	
   	
  CRITICAL_SECTION 	
  cs	
  
§  Khởi	
  tạo:	
   	
  InitializeCriticalSection(&cs)	
  
§  Sử	
  dụng	
  
	
  EnterCriticalSection(&cs)	
  
	
  //	
  Bắt	
  đầu	
  đoạn	
  găng	
  
	
  //	
  Kết	
  thúc	
  đoạn	
  găng	
  
	
  LeaveCriticalSection(&cs)	
  	
  //	
  	
  	
  DeleteCriticalSection(&cs)	
  
§  Ví	
  dụ	
  
§  Đặc	
  điểm:	
  chỉ	
  có	
  tác	
  dụng	
  trong	
  cùng	
  một	
  tiến	
  trình	
  
3.2	
  Đoạn	
  găng	
  
49	
  
§  Đèn	
  hiệu	
  (Semaphore)	
  dùng	
  để	
  giới	
  hạn	
  số	
  lượng	
  luồng	
  tối	
  đa	
  được	
  phép	
  thực	
  thi	
  cùng	
  một	
  đoạn	
  chương	
  trình.	
  
§  Sử	
  dụng	
  
§  Khai	
  báo:	
   	
  HANDLE 	
  hSemaphore	
  
§  Khởi	
  tạo:	
   	
  hSemaphore	
  =	
  CreateSemaphore(NULL,5,5,NULL)	
  
§  Sử	
  dụng	
  
	
  WaitForSingleObject(hSemaphore,	
  0L)	
  
	
  //	
  
	
  //	
  
	
  ReleaseSemaphore(hSemaphore,1,NULL)	
  	
  //	
  	
  CloseHandle(hSemaphore)	
  
§  Ví	
  dụ	
  
§  Đặc	
  điểm	
  
§  Dùng	
  chung	
  được	
  giữa	
  các	
  tiến	
  trình	
  
§  Tốc	
  độ	
  chậm	
  hơn	
  CRITICAL_SECTION	
  
3.3	
  Đèn	
  hiệu	
  
50	
  
§  Mutex	
  dùng	
  để	
  bảo	
  vệ	
  tài	
  nguyên	
  của	
  chương	
  trình,	
  tại	
  một	
  thời	
  điểm	
  chỉ	
  cho	
  phép	
  một	
  luồng	
  của	
  một	
  tiến	
  trình	
  truy	
  nhập.	
  
§  Sử	
  dụng	
  
§  Khai	
  báo:	
   	
  HANDLE 	
  hMutex;	
  
§  Khởi	
  tạo:	
   	
  hMutex	
  =	
  CreateMutex(NULL,	
  FALSE,	
  NULL)	
  
§  Sử	
  dụng	
  
	
  WaitForSingleObject(hMutex,	
  INFINITE)	
  
	
  //	
  
	
  //	
  
	
  ReleaseMutex(hMutex)	
  
§  Ví	
  dụ	
  
§  Đặc	
  điểm	
  
§  Chậm	
  hơn	
  CRITICAL_SECTION	
  
§  Có	
  thể	
  đồng	
  bộ	
  giữa	
  các	
  tiến	
  trình	
  
3.4	
  Mutex	
  
51	
  
§  Event	
  dùng	
  đồng	
  bộ	
  hoạt	
  động	
  của	
  các	
  luồng	
  thông	
  qua	
  cơ	
  chế	
  báo	
  hiệu.	
  
§  Sử	
  dụng	
  
§  Khai	
  báo:	
   	
  HANDLE 	
  hEvent;	
  
§  Khởi	
  tạo:	
   	
  hMutex	
  =	
  CreateEvent(NULL,	
  TRUE,	
  FALSE,	
  “MyEvent”)	
  
§  Sử	
  dụng	
  
	
  WaitForSingleObject(hEvent,	
  INFINITE)	
  
	
  //	
  
	
  SetEvent(hEvent) 	
   	
  //	
  Báo	
  hiệu	
  các	
  luồng	
  khác	
  
	
  ResetEvent(hEvent) 	
  //	
  Chặn	
  các	
  luồng	
  khác	
  
	
  //	
  
	
  CloseHandle(hEvent)	
  
§  Ví	
  dụ	
  
3.5	
  Event	
  
52	
  
§  SRW	
  Lock	
  (Slim	
  Reader	
  Writer	
  Lock	
  )dùng	
  đồng	
  bộ	
  hoạt	
  động	
  của	
  các	
  luồng	
  thông	
  tương	
  tự	
  như	
  đoạn	
  găng	
  
§  Sử	
  dụng	
  
§  Khai	
  báo:	
   	
  SRWLOCK	
   	
  lock;	
  
§  Khởi	
  tạo:	
   	
  InitializeSRWLock(&lock);	
  
§  Sử	
  dụng	
  
	
  AcquireSRWLockShared(&lock)	
  	
  AcquireSRWLockExclusive(&lock)	
  
	
  //	
  
	
  //	
  
	
  ReleaseSRWLockShared(&lock)	
  	
  ReleaseSRWLockExclusive(&lock)	
  
§  Ví	
  dụ	
  
3.5	
  SRW	
  Lock	
  
53	
  
1.  Viết	
  chương	
  trình	
  chat	
  Client	
  và	
  Server	
  với	
  kênh	
  truyền	
  đã	
  mã	
  
hóa	
  	
  bằng	
  thuật	
  toán	
  AES-‐256,	
  sử	
  dụng	
  thư	
  viện	
  OpenSSL	
  và	
  
CryptoAPI.	
  Mật	
  khẩu	
  mã	
  hóa	
  là	
  :	
  123456.	
  Việc	
  mã	
  hóa	
  và	
  việc	
  
nhận	
  dữ	
  liệu	
  được	
  thực	
  hiện	
  đồng	
  thời	
  trên	
  2	
  luồng	
  riêng	
  biệt,	
  sử	
  
dụng	
  cơ	
  chế	
  đồng	
  bộ	
  CRITICAL_SECTION	
  
2.  Viết	
  chương	
  trình	
  mã	
  hóa	
  và	
  giải	
  mã	
  tệp	
  tin	
  theo	
  thuật	
  toán	
  
AES-‐256,	
  với	
  tên	
  nhập	
  từ	
  bàn	
  phím,	
  mật	
  khẩu	
  mã	
  hóa	
  là	
  :nopass.	
  
Sử	
  dụng	
  thư	
  viện	
  OpenSSL	
  và	
  CryptoAPI	
  
Bài	
  tập	
  
54	
  
            Các file đính kèm theo tài liệu này:
 giao_trinh_lap_trinh_an_toan_chuong_3_kiem_soat_xung_dot_syn.pdf giao_trinh_lap_trinh_an_toan_chuong_3_kiem_soat_xung_dot_syn.pdf