Race Condition Là Gì – Làm Sao Để Tránh Gặp Phải Race

Race Condition Là Gì – Làm Sao Để Tránh Gặp Phải Race

Race condition là một điều kiện xảy ra khi nhiều threads cùng truy cập and cùng lúc muốn căn chỉnh dữ liệu (có thể là một  biến, một  row trong database, một  vùng shared data, memory , etc…). Vì thuật toán convert việc thực thi giữa những threads có thể xảy ra bất kể khi nào, nên không còn biết đc thứ tự của những threads truy cập and căn chỉnh dữ liệu đó sẽ dẫn đến trị giá của data sẽ không như yêu cầu. Kết quả sẽ dựa dẫm vào thuật toán thread scheduling của hệ điều hành. Các bước những threads thực thi lệnh trông như một cuộc đua giữa những hoạt động viên điền kinh olympic vì thế có thể liên tưởng đến thuật ngữ “Race condition”.

Làm sao để khai thác lỗi ?

Nếu một chương trình vướng phải lỗi này, người tận dụng lỗi có thể chạy nhiều tiến trình song song để “race” với chương trình có lỗi, với mục đích là căn chỉnh chuyển động của chương trình ấy. Bình thường, tình huống đua còn đc biết đến với tên gọi thời hạn check/thời hạn dùng (Time Of Kiểm tra/Time Of Use, TOC/TOU).

Bài Viết: Race condition là gì

Đôi chút, khi khai thác một lỗi thì hai khúc mắc chính cho việc tận dụng lỗi là cần nhập gì and cách thức nhập dữ liệu ấy vào chương trình, ở tình huống này các bạn gặp khúc mắc quan trọng thứ ba là bao giờ thì nhập dữ liệu vào chương trình. Một chương trình có thể không nhận dữ liệu cho đến khi một số mong muốn đc cung ứng, and chỉ nhận dữ liệu trong một khoảng thời điểm ngắn. Bởi vậy cam đoan đc thời hạn nhập liệu đúng chuẩn biến thành một vấn đề cơ bản.

Xem Ngay:  Creepypasta Là Gì - Creepypasta Và Những Sự Thật Thú Vị

Chẳng hạn, các bạn chứa một đoạn code sau

Trước hết các bạn sẽ gán quyền root cho chương trình:

Chương trình này được phép đọc content của một tập tin mang tên là tham số dòng lệnh trước tiên and in content tập tin đó ra màn hình. Do chương trình này có quyền root, nên hàm fopen sẽ có thể đọc đc content của bất kể tập tin nào. Vì không còn để một người mua thỉnh thoảng đọc content của những tập tin nhạy cảm. Tạo một tập tin thuộc về root để bảo đảm chỉ có root mới đọc đc tập tin này. Content tập tin là dòng chữ “Ok, fine :(” .

Chương trình đã dùng thêm hàm access để check xem người mua khác có thể đọc tập tin này hay không. And người mua nhiều khi không còn đọc đc tập tin này

Vấn đề với chương trình này đó là hàm access and hàm fopen không triển khai hai tác vụ check quyền and mở tập tin một cách thức không còn tách rời (atomic). Nói một cách thức khác, chứa một khoảng thời điểm ngắn giữa hàm access and hàm fopen mà hệ điều hành có thể chuyển sang thực thi một tiến trình khác, rồi quay lại như trong hình sau.
Bước 1: Tạo một link tên raceexp chỉ đến một tập tin các bạn có thể đọc ví dụ như race.c.

Xem Ngay: Phế Liệu Tiếng Anh Là Gì, Phế Liệu Trong Tiếng Anh Là Gì

Xem Ngay:  Chủ đề Sức Khỏe Về Viêm Khớp Dạng Thấp (rheumatoid Arthritis Là Gì

Bước 2: Thực thi chương trình bị lỗi với tham số raceexp để chương trình này check khả năng đọc tập tin raceexp, mà thật chất là tập tin race.c.

Bước 3: Nếu phát tài, hệ điều hành chuyển quyền thực thi lại cho tiến trình đc tạo ở bước 1 ngay sau khi tiến trình ở bước 2 hoàn thành việc check, thì các bạn sẽ chuyển link raceexp chỉ đến tập tin race.txt.

Xem Ngay: Shark Là Gì – định Nghĩa, Ví Dụ, Giải Thích

Bước 4: Hệ điều hành chuyển lại tiến trình bị lỗi, and hàm fopen mở tập tin raceexp mà lúc này thật ra là tập tin race.txt.

Để tối ưu việc tận dụng, các bạn sẽ đặt những tác vụ convert link mềm trong một script như trên. Các bạn sẽ thực thi đoạn script này ở chế độ background. Ở chế độ foreground, các bạn sẽ triển khai lệnh gọi chương trình bị lỗi. Sau một vài ba lần gọi, các bạn sẽ đọc đc content của tập tin race.txt. 

Race conditon thường gặp nhiều trong những phần mềm xử lý tập tin, hoặc truy cập cơ sở dữ liệu. Những khoáng sản này đc áp dụng chung bởi nhiều tiến trình, hoặc tiểu trình (thread) của cùng một tiến trình nên rất dễ xảy ra những cuộc “đua” giành quyền dùng. Cách thức thỉnh thoảng nhất để né lỗi là tuần tự hóa (serialize) truy cập vào các khoáng sản này, với những khóa (lock), hoặc cờ hiệu (semaphore).

Xem Ngay:  Medication Là Gì - Nghĩa Của Từ Medication

Thể Loại: Share Kiến Thức Cộng Đồng

Bài Viết: Race Condition Là Gì – Làm Sao Để Tránh Gặp Phải Race

Thể Loại: LÀ GÌ

Nguồn Blog là gì: https://hethongbokhoe.com Race Condition Là Gì – Làm Sao Để Tránh Gặp Phải Race

Leave a Reply