Bài giảng Lập trình an toàn - Chương 3: Kiểm soát xung đột - Lương Ánh Hoàng
3.1 Khái niệm
- 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ụ
int x = 0; DWORD WINAPI Thread(LPVOID IPParam)
for (int i=0;i<2000000;i++) x++;="" return="">2000000;i++)>
int_tmain(int args, _TCHAR* argv[]
HANDLE hThread1 = Create Thread(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 o;
Bạn đang xem tài liệu "Bài giảng Lập trình an toàn - Chương 3: Kiểm soát xung đột - Lương Ánh Hoàng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Lập trình an toàn - Chương 3: Kiểm soát xung đột - Lương Ánh Hoàng
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
File đính kèm:
- bai_giang_lap_trinhantoan_chuong_3_kiem_soat_xung_dot_luong.pdf