Đèn hiệu:P1 Chay truoc roi den P2,P3
Trang 1 trong tổng số 1 trang
Đèn hiệu:P1 Chay truoc roi den P2,P3
Neu ko doc dc tieng viet cho menu Format > Font chon font Verdana
Trước tiên bạn tạo ba New Project đặt tên là P1, P2, P3
Đây là P1:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HANDLE semSynch;
int main(){
semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
printf("P1 chay xong ! \n\n");
printf("Bam phim bat ky de P2, P3 chay tiep:");
getch();
ReleaseSemaphore(semSynch, 2, 0);
return 0;
}
Đây là P2:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HANDLE semSynch;
int main(){
semSynch=CreateSemaphore(0, 0, 2, "SYNCH12") ;
printf("Dang cho P1 chay truoc...\n\n");
WaitForSingleObject(semSynch, INFINITE);
printf("P2 chay xong !\n\n");
printf("Bam phim bat ky de P3 chay tiep:");
getch();
ReleaseSemaphore(semSynch, 2, 0);
return 0;
}
Đây là P3:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HANDLE semSynch;
int main(){
semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
printf("Dang cho P1 chay truoc...\n\n");
WaitForSingleObject(semSynch, INFINITE);
printf("Dang cho P2 chay truoc...\n\n");
WaitForSingleObject(semSynch, INFINITE);
printf("P2 chay xong !\n\n");
printf("Bam phím bat ky de thoat:");
getch();
return 0;
}
Ý tưởng:
- Trước tiên, ta chạy P3 nếu theo Q hỉu lệnh này: semSynch=CreateSemaphore(0, 0, 2, "SYNCH12"); nó sẽ xét
P1 nếu P1 chưa chạy thì nó sẽ in dòng lệnh printf("Dang cho P1 chay truoc...\n\n"); và dòng lệnh này là chờ
WaitForSingleObject(semSynch, INFINITE);(bật đèn xanh nếu chạy rùi còn bật đèn đỏ nếu chưa chạy)
nếu P1 chạy, nó tiếp tục xét tới P2 và nếu P2 chưa chạy, nó cũng in dòng lệnh và chờ(dòng lệnh như trên).
- Tiếp theo, ta chạy P2 trong P2 nó sẽ xét P1 bằng dòng lệnh: semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
(bật đèn xanh nếu chạy rùi còn bật đèn đỏ nếu chưa chạy) và nó in dòng lệnh chờ P1, khi P1 chạy xong: nó sẽ chạy
và trả dòng chạy cho P3 bằng lệnh: ReleaseSemaphore(semSynch, 2, 0);(đây là lệnh trả đèn).
- Sau cùng, ta sẽ chạy P1: khi ta chạy nó cũng có dòng lệnh này: semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
nhưng ở đây nó không có cái nào đứng trước nó nên nó sẽ tự động bật đèn xanh lên và chạy: printf("P1 chay xong ! \n\n");
và sau đó ta bấm phím bất kỳ để trả lại cho P2 để tiếp tục chạy: ReleaseSemaphore(semSynch, 2, 0);
-
Trước tiên bạn tạo ba New Project đặt tên là P1, P2, P3
Đây là P1:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HANDLE semSynch;
int main(){
semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
printf("P1 chay xong ! \n\n");
printf("Bam phim bat ky de P2, P3 chay tiep:");
getch();
ReleaseSemaphore(semSynch, 2, 0);
return 0;
}
Đây là P2:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HANDLE semSynch;
int main(){
semSynch=CreateSemaphore(0, 0, 2, "SYNCH12") ;
printf("Dang cho P1 chay truoc...\n\n");
WaitForSingleObject(semSynch, INFINITE);
printf("P2 chay xong !\n\n");
printf("Bam phim bat ky de P3 chay tiep:");
getch();
ReleaseSemaphore(semSynch, 2, 0);
return 0;
}
Đây là P3:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
HANDLE semSynch;
int main(){
semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
printf("Dang cho P1 chay truoc...\n\n");
WaitForSingleObject(semSynch, INFINITE);
printf("Dang cho P2 chay truoc...\n\n");
WaitForSingleObject(semSynch, INFINITE);
printf("P2 chay xong !\n\n");
printf("Bam phím bat ky de thoat:");
getch();
return 0;
}
Ý tưởng:
- Trước tiên, ta chạy P3 nếu theo Q hỉu lệnh này: semSynch=CreateSemaphore(0, 0, 2, "SYNCH12"); nó sẽ xét
P1 nếu P1 chưa chạy thì nó sẽ in dòng lệnh printf("Dang cho P1 chay truoc...\n\n"); và dòng lệnh này là chờ
WaitForSingleObject(semSynch, INFINITE);(bật đèn xanh nếu chạy rùi còn bật đèn đỏ nếu chưa chạy)
nếu P1 chạy, nó tiếp tục xét tới P2 và nếu P2 chưa chạy, nó cũng in dòng lệnh và chờ(dòng lệnh như trên).
- Tiếp theo, ta chạy P2 trong P2 nó sẽ xét P1 bằng dòng lệnh: semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
(bật đèn xanh nếu chạy rùi còn bật đèn đỏ nếu chưa chạy) và nó in dòng lệnh chờ P1, khi P1 chạy xong: nó sẽ chạy
và trả dòng chạy cho P3 bằng lệnh: ReleaseSemaphore(semSynch, 2, 0);(đây là lệnh trả đèn).
- Sau cùng, ta sẽ chạy P1: khi ta chạy nó cũng có dòng lệnh này: semSynch=CreateSemaphore(0, 0, 2, "SYNCH12");
nhưng ở đây nó không có cái nào đứng trước nó nên nó sẽ tự động bật đèn xanh lên và chạy: printf("P1 chay xong ! \n\n");
và sau đó ta bấm phím bất kỳ để trả lại cho P2 để tiếp tục chạy: ReleaseSemaphore(semSynch, 2, 0);
-
HoThiVuong2009- Tổng số bài gửi : 87
Join date : 19/02/2009
Age : 40
Đến từ : Phú Yên
Similar topics
» Giaỉ quyết bài toán đồng bộ P1 tới trước báo hiệu P2 và P3 cùng chạy sau P1
» Thảo luận Bài 6
» Thảo luận Bài 6
» Chương trình sản xuất tiêu thụ P1 chạy trước P2 và P3
» Bài giải về bài tập 3 đèn hiệu P3 chay sau P1 va P2
» Thảo luận Bài 6
» Thảo luận Bài 6
» Chương trình sản xuất tiêu thụ P1 chạy trước P2 và P3
» Bài giải về bài tập 3 đèn hiệu P3 chay sau P1 va P2
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết