Thảo Luận Bài 4 - Page 3 - Hệ điều Hành
Có thể bạn quan tâm
Re: Thảo luận Bài 4
NguyenChiKien(HLT3) 30/3/2014, 09:06
NguyenThiKimThanh (102C) đã viết:Tham khảo code sản xuất và tiêu thụ, các bạn cho ý kiến nhaCode:#define BUFFER_SIZE 10 //số lượng khoang chứaint buffer[BUFFER_SIZE]; //bộ nhớ đệm size 10 p.tử int in=0; //con trỏ tới vị trí trống kế tiếpint out=0; //con trỏ tới vị trí trống tiếp theoint nextProduced=1; //tạo 1 sản phẩm được sản xuất kế tiếp//Hàm sản xuất:void Producer(){ while (1) { //Quá trình tạo ra 1 sản phẩm // ... San xuat (nextProduced //vòng lặp quẩn tại đây cho đến khi có 1 chỗ trống trong bộ đệm hay ngăn chứa sản phẩm while(((in+1)%BUFFER_SIZE)==out); //khi vòng lặp while kết thúc =>có 1 chỗ trống để chèn sản phẩm vào buffer[in]=nextProduced++; //chèn sản phẩm tại vị trí in vô ngăn chứa, sản phẩm được sản xuất in=(in+1)%BUFFER_SIZE; //tìm vị trí khác để Producer chèn thêm sản phầm vào //hàm SuspendThread dùng để tạo ngưng 1 luồng hiện hành SuspendThread(GetCurrentThread()); }}//Hàm tiêu thụ:void Consumer(){ int nextConsumed; while (1) { // vòng lặp quẩn tại đây khi các ngăn chứa sản phầm đều trống while(in==out); //vòng lặp while thoát khi có 1 ngăn chứa sản phầm nextConsumed=buffer[out]; //lấy sản phẩm tại vị trí out ra khỏi ngăn out=(out+1)%BUFFER_SIZE; //tìm vị trí khác để Consumer lấy sản phẩm // ... Tieu thu (nextConsumed)--> quá trình tiêu thụ sàn phẩm //hàm Sleep đưa luồng vào trạng thái ngủ trong khi chờ Producer sản xuất thêm sản phầm //đếm số mili giây trong giờ hiện tại % 5000, hết thời gian thực hiện while kế tiếp Sleep(GetTickCount()%5000); }}int main(){ HANDLE ProducerHandle1, ProducerHandle2;//biến HANDLE chứa mục quản nhà sản xuất HANDLE ConsumerHandle1, ConsumerHandle2;// biến HANDLE chứa mục quản nhà tiêu thụ DWORD ProducerID1, ProducerID2, ConsumerID1, ConsumerID2;//chứa ID nhà sản xuất và nhà tiêu thụ //khởi tạo nhà sản xuất với các thông tin: Producer, ID, số 4 biểu thị trạng thái của Producer lúc khởi tạo: trạng thái ngủ ProducerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer,0,4,&ProducerID1); ProducerHandle2=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer,0,4,&ProducerID2); //khởi tạo nhà tiêu thụ với các thông tin: Consumer, ID, số 0 biểu thị trạng thái của Producer lúc khởi tạo: trạng thái thức ConsumerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer,0,0,&ConsumerID1); ConsumerHandle2=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer,0,0,&ConsumerID2); while(1) { printf("\n- Nhan phim P/p de san xuat, nhan 0 de ket thuc:"); switch (getch()) { //nhấn phím P=Producing case 'P': // đánh thức Producer lúc này đang ở trạng thái ngủ ResumeThread(ProducerHandle1); break; //nhấn phím p=Producing case 'p': ResumeThread(ProducerHandle2); break; //giải phóng Producer và Consumer khỏi bộ nhớ case '0': { CloseHandle(ProducerHandle1); CloseHandle(ProducerHandle2); CloseHandle(ConsumerHandle1); CloseHandle(ConsumerHandle2); return 0; } } //ngừng 1 khoảng thời gian nhất định để nhà sản xuất vừa được đánh thức kịp hoàn tất 1 chu trình công việc Sleep(1); //show kết quả sau khi sản xuất tiêu thụ ShowBuffer(); }}Thanks... Rõ ràng!!!!
Từ khóa » Khi Lời Gọi Sleep() được Gọi Bởi Tiến Trình P1 Thì Tiến Trình P1 Sẽ Chuyển Tới Trạng Thái Nào
-
Các Giải Pháp « SLEEP And WAKEUP - .vn
-
HĐH - Ôn Tập Cuối Kỳ - Part 1 (Lý Thuyết) | Facebook
-
CÁC GIẢI PHÁP ĐỒNG BỘ HOÁ
-
[PDF] ĐỒNG BỘ HOÁ QUÁ TRÌNH
-
(PDF) Bài Giảng | Nobi Nobita
-
Chương 5 - Đồng Bộ Flashcards | Quizlet
-
Các Giải Pháp « SLEEP And WAKEUP » - Chiến Lược điều Phối Với ...
-
[PDF] TƯƠNG TRANH GIỮA CÁC PROCESS - CSE
-
[PDF] HỆ ĐIỀU HÀNH - Rachbauer Kran
-
Thảo Luận Bài 5 - Page 6 - Hệ điều Hành
-
Chương 6 - 7 | Mathematics Quiz - Quizizz
-
Chap4 ProcessesSynchronization | PDF - Scribd
-
[DOC] BÀI 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH
-
[PDF] Table Of Contents - GitHub Pages