Critical section là gì?

Noun None
critical region

Trong lập trình đồng thời (concurrent programming), việc truy cập đồng thời (concurrent access) vào tài nguyên được chia sẻ (shared resource) có thể dẫn đến hành vi không mong muốn hoặc có lỗi, do đó, các phần của chương trình nơi tài nguyên được chia sẻ được truy cập cần được bảo vệ theo cách tránh việc truy cập đồng thời. Phần được bảo vệ này là critical section hoặc critical region. Nó không thể được thực thi bởi nhiều tiến trình (process) cùng một lúc.

Các mã hoặc tiến trình khác nhau có thể chứa cùng một biến hoặc các tài nguyên khác cần được đọc hoặc ghi nhưng kết quả của chúng phụ thuộc vào thứ tự diễn ra các hành động. Ví dụ: nếu một biến x phải được đọc bởi tiến trình A và tiến trình B phải ghi vào cùng một biến x cùng một lúc, thì tiến trình A có thể nhận giá trị cũ hoặc mới của x.

Tiến trình A


// Process A
.
.
b = x + 5; // instruction executes at time = Tx
.

Tiến trình B


// Process B
.
.
x = 3 + z; // instruction executes at time = Tx
.

Trong những trường hợp như thế này, một critical section là quan trọng. Trong trường hợp trên, nếu A cần đọc giá trị cập nhật của x, việc thực hiện đồng thời tiến trình A và tiến trình B có thể không cho kết quả cần thiết. Để ngăn chặn điều này, biến x được bảo vệ bởi một critical section. Đầu tiên, B có quyền truy cập vào critical section. Khi B hoàn thành việc ghi giá trị, A có quyền truy cập vào critical section và biến x có thể được đọc.

Bằng cách kiểm soát cẩn thận những biến nào được sửa đổi bên trong và bên ngoài critical section, việc truy cập đồng thời vào biến được chia sẻ sẽ bị ngăn chặn. Critical section thường được sử dụng khi một chương trình đa luồng (thread) phải cập nhật nhiều biến có liên quan khiến các thay đổi xung đột đối với dữ liệu đó. Trong một tình huống liên quan, một critical section có thể được sử dụng để đảm bảo rằng một tài nguyên được chia sẻ, ví dụ, một máy in, chỉ có thể được truy cập bởi một tiến trình tại một thời điểm.

Learning English Everyday