Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Bài tập về cài đặt các thuật toán lập lịch cho CPU ( FCFS, FJFS..).

Go down

Bài tập về cài đặt các thuật toán lập lịch cho CPU ( FCFS, FJFS..). Empty Bài tập về cài đặt các thuật toán lập lịch cho CPU ( FCFS, FJFS..).

Bài gửi  lamtienkhoa(102c) 4/5/2012, 16:45

#include <stdio.h>
#include <windows.h>

HANDLE s;

int count=0;
void countthread() // Tang bien dem len 1000 lan
{ int x;
for (int i=0; i<1000; i++ )
{ WaitForSingleObject(s,INFINITE); // Down()
//begin of critical section
x=count;
x ;
for(int j=0; j<20000; j++); // tao ngat tien trinh
// Admin: Không phải, vòng lặp trên "mô phỏng" sự "trễ" một lúc, tức "làm gì đó" khá lâu !
count=x;
//end of critical section
ReleaseSemaphore(s,1,0); // Up()
}
}
void main()
{
HANDLE h[4]; DWORD id;
s=CreateSemaphore(0,1,1,0); //
for (int i=0; i<4; i++ )
h[i]=CreateThread( NULL,0,(LPTHREAD_START_ROUTINE) countthread,
(VOID *)i,0,&id);
WaitForMultipleObjects(4,h,TRUE,INFINITE);
printf("count=%dn",count);
CloseHandle(s);
}

Admin
- Đây chỉ đơn giản là demo một chương trình đa luồng (5 luồng) cùng chung code là hàm countthread với chức năng tăng biến đếm count dùng chung lên 1000 đơn vị !
- Do 5 luồng cùng đồng thời tìm cách tăng biến count (tài nguyên chung), cần thiết phải dùng đèn hiệu s nhị phân không tên để bảo vệ đoạn tương tranh sao cho mỗi thời điểm chỉ 1 luồng được thao tác với count (đảm bảo tính Loại trừ tương hỗ), các luồng khác có nhu cầu tăng count phải "ngủ" tại WaitForSingleObject(s,INFINITE).
- Sau khi tăng count xong, luồng hiện hành phải gọi hàm ReleaseSemaphore(s,1,0) để tăng giá trị của đèn s lên 1 (chuyển màu từ Đỏ sang Xanh).
- Thực chất biến s chứa Mục quản của đèn hiệu tương ứng.

lamtienkhoa(102c)

Tổng số bài gửi : 43
Join date : 28/02/2011

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết