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.

Đèn hiệu:P1 Chay truoc roi den P2,P3

Go down

Đèn hiệu:P1 Chay truoc roi den P2,P3 Empty Đèn hiệu:P1 Chay truoc roi den P2,P3

Bài gửi  HoThiVuong2009 11/5/2009, 13:52

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);
-
HoThiVuong2009
HoThiVuong2009

Tổng số bài gửi : 87
Join date : 19/02/2009
Age : 40
Đến từ : Phú Yên

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