Professional Documents
Culture Documents
Bao Cao BTL NguyeTuanHung-20182557
Bao Cao BTL NguyeTuanHung-20182557
Hà Nội, 05-2021
MỤC LỤC
1
Danh mục hình vẽ
2
Lời nói đầu
3
I. Mô tả mục tiêu, phương pháp, cách triển khai mã nguồn
4
station_load_train (struct station * station, int Count)
Hàm dùng để điều khiển tàu tham chiếu tới struct station gồm các
giá trị ghế trống, hành khách đợi ở ga, hành khách lên tàu và các biến
điều kiện khác, tham số count là số ghể trống.Khi thỏa mãn điều kiện
hành khách đợi ở ga > 0 và ghể trống trên tàu > 0. Khi đó tàu sẽ dừng và
thông báo cho tất cả hành khách đang đợi ở ga để lên tàu. Hàm chỉ được
chạy khi tàu ở ga và hoàn tất quá trình khách đã lên tàu.
5
1.3 Cách triển khai mã nguồn
Sau khi xác định toàn bộ chức năng của vấn đề được đặt ra, nhóm em
đã sắp xếp và sử dụng ngôn ngữ lập trình C để tạo thành một chương
trình hoàn chỉnh có thể đưa vào sử dụng.
Chương trình C hoàn chỉnh được biên dịch bằng “a test framework”
có sẵn do người ra đề tài cung cấp và được chạy thông qua Termial trên
hệ điều hành Ubuntu 18.04. Kết quả cuối cùng sẽ được hiển thị tại màn
hình giao diện Terminal.
II. Công việc thực hiện
Sau quá trình trao đổi và thảo luận, nhóm em đã thống nhất và đưa ra
công việc của từng các nhân. Bản thân em làm 2 nhiệm vụ chính là viết
hàm khởi tạo station_wait_for_train() và station_on_broad() với một số
phần khác. Các hàm trên đều được viết bằng ngôn ngữ C, hoàn chỉnh
cùng với các phần code khác và biên dịch bằng “a test framework” có
sẵn do người ra đề tài cung cấp, chạy thông qua Termial trên hệ điều
hành Ubuntu 18.04. Kết quả cuối cùng sẽ được hiển thị tại màn hình giao
diện Terminal như trong báo cáo của nhóm.
Sau đây là mô tả mã nguồn cho các hàm mà em đã viết.
2.1 Mô tả mã nguồn cho hàm station_wait_for_train()
Luồng điều khiển hàm station_wait_for_train() thực hiện lấy khóa
bằng cách gọi hàm lock_acquire() và tiếp tục thực thi hàm, các luồng
điều khiển hàm khác phải dừng thực thi. Khi hàm
station_wait_for_train() được gọi tức là có thêm một hành khách đến ga
và đang đợi ghế trống, hk_doi_o_ga tăng thêm 1.Khi số khách lên tàu
bằng đúng số ghế trông hoặc ghế trông trên tàu đã hết thì thực hiện gọi
hàm cond_wait() để hành khách tiếp tục đơi tàu có ghế trống tiếp theo
đến. Khi tàu có ghế trống đến,hành khách sẽ lên tàu thì lúc này hành
6
khach đợi ở ga (hk_doi_o_ga) phải giảm đi 1 và hành khách lên tàu
(hk_len_tau) sẽ tăng lên 1. Luồng điều khiển hàm nhả khóa bằng cách
gọi hàm lock_release() để cho các luồng khác thực thi.
7
Hình 2: Kết quả hàm station_on_broad
Các hàm đều đã có thể chạy được và đưa ra kết quả giống như mong
muốn của nhóm. Trong quá trình tìm hiểu và thực hiện bài tập lớn, em
cũng đã được tiếp cận với lập trình đa luồng để có thể áp dụng các kiến
thức được học trên lớp. Em hi vọng có thể nhận được các đóng góp của
thầy để có thể tối ưu hóa mã nguồn của mình hơn.
[1] https://cseweb.ucsd.edu/
[2] https://web.stanford.edu/
8
9