Một ngôn ngữ h−ớng thủ tục chung đ−ợc định nghĩa tổng quát bằng việc đặc tả hoàn chỉnh cấu trúc cú pháp và ngữ nghĩa các thành phần chính. Theo đặc tính, các thành phần này đ−ợc phân lớp nh− sau:
• Cấu trúc ch−ơng trình chỉ ra ch−ơng trình và các thành phần con của nó (thủ tục, khối, câu lệnh, biểu thức, biến, hằng....) đ−ợc bố trí nh− thế nào. Ngầm định các thành phần của ch−ơng trình đ−ợc thực hiện tuần tự; ngoại trừ việc thay đổi t−ờng minh bằng câu lệnh điều khiển.
• Cấu trúc dữ liệu đ−ợc định nghĩa để trình bày các đối t−ợng trong ch−ơng trình. Tính trừu t−ợng hoá của kiểu dữ liệu và sự thi hành hiệu quả của chúng là mục tiêu nguyên thủy.
• Cấu trúc điều khiển qui định dòng thực hiện ch−ơng trình. Đa số ngôn ngữ nhấn mạnh việc dùng cấu trúc điều khiển hiển dạng one - in - one - out (một - vào - một - ra: là một đặc tr−ng của lập trình có cấu trúc) chẳng hạn nh− là if - then - else, while - do, repeat - until. Một loại cấu trúc điều khiển bao chứa lời gọi, quay về và thoát khỏi ch−ơng trình con.
• Các thủ tục và lời gọi hệ thống kích hoạt các thủ tục đặc biệt hoặc dịch vụ hệ
thống. Chúng làm thay đổi h−ớng thực hiện và cho phép truyền tham số.
• Vào/Ra cho phép nhập dữ liệu vào và đ−a ra kết quả thực hiện ch−ơng trình. Mọi ch−ơng trình đều có ít nhất một thao tác ra. Vào/Ra có thể đ−ợc xem là tr−ờng hợp riêng của truyền thông CTĐ.
• Phép gán sinh kết quả cho đối t−ợng dữ liệu: đó là các thao tác cơ bản khi thực hiện ch−ơng trình
Bảng 3.1 cho ví dụ về các ph−ơng pháp đồng bộ đ−ợc hiển thị theo ph−ơng tiện sử dụng ngôn ngữ. Mối quan hệ giữa ph−ơng pháp đồng bộ và những ph−ơng tiện ngôn ngữ t−ơng ứng là không t−ờng minh. Nó đ−ợc dùng chỉ để chứng tỏ sự tiến hóa việc phát triển cấu trúc ngôn ngữ cho ĐBQT.
Ph−ơng pháp đồng bộ Ph−ơng tiện ngôn ngữ
Đồng bộ chia xẻ biến chia xẻ
Semaphore (Cờ tín hiệu) Biến chia xẻ và lời gọi hệ thống Bộ giám sát Trừu t−ợng hóa kiểu dữ liệu Khoảng tới hạn điều kiện Cấu trúc điều khiển
Kết xuất định kỳ Kiểu dữ liệu và cấu trúc điều khiển Biểu thức đ−ờng đi Kiểu dữ liệu và cấu trúc ch−ơng trình
Đồng bộ CTĐ
Các QT tuần tự truyền thông Vào và Ra Lời gọi thủ tục từ xa - RPC Lời gọi thủ tục
Cuộc hẹn Lời gọi thủ tục và truyền thông
Bảng 3.1 Kỹ thuật đồng bộ và ph−ơng tiện ngôn ngữ
Khái niệm đồng bộ ở đây đ−ợc chia làm hai loại: 5 tr−ờng hợp trên là ph−ơng pháp đồng bộ chia xẻ biến chung, còn 3 tr−ờng hợp d−ới theo cách tiệm cận CTĐ. Hai đoạn tiếp theo sẽ thảo luận về các cơ chế đồng bộ kiểu CTĐ thông qua giải bài toán đọc đồng thời / ghi độc quyền bằng cách sử dụng từng ph−ơng pháp ở đây.
Bài toán QT đọc / QT ghi sử dụng giả thiết thông th−ờng về đọc và ghi thực thể đối t−ợng dữ liệu (chẳng hạn, nhiều QT đọc có thể đồng thời nh−ng QT ghi cần loại trừ ràng buộc với các QT đọc và ghi khác: nó không cho phép QT đọc và ghi khác đồng thời thực hiện với nó). Bài toán này là đủ tổng quát đối với mô hình động bộ hóa và đồng thời trong nhiều ứng dụng.
Bài toán QT đọc / QT ghi rất đa dạng, vì thế không thể chỉ đặt chúng ở mức độ khái niệm lập trình đồng thời mà trong nhiều chuyên mục và dự án lập trình cần xác định
biến thể của chúng một cách chính xác hơn. Ph−ơng án −u tiên QT đọc: một QT ghi
xuất hiện sẽ đợi cho đến khi không còn QT đọc chạy. Nh− vậy QT đọc có quyền −u tiên cao hơn QT ghi và điều này có thể dẫn tới việc QT ghi “bị xếp xó” nếu QT đọc mới lại xuất hiện tr−ớc khi một QT đọc ch−a thực hiện xong. Ph−ơng án −u tiên QT ghi: một QT đọc xuất hiện sẽ đợi cho đến khi không còn QT ghi chạy và QT ghi đang
đợi. Điều này cũng dẫn tới tình huống QT đọc đợi mãi nh−ng chẳng bao giờ đến luợt mình.
Tồn tại điểm ch−a rõ ràng khi định nghĩa −u tiên QT đọc khi cả QT đọc và QT ghi
đang đợi một QT ghi khác đang thực hiện. Sau khi QT ghi này hoàn thành xong thì sẽ
trao quyền điều khiển cho ai ? (QT đọc hay QT ghi ?). Ta gọi sự −u tiên QT đọc là sự
−u tiên QT đọc mạnh (strong reader) nếu nh− QT đọc luôn đ−ợc xếp lịch −u tiên hơn các QT ghi đang đợi một QT ghi hoàn thành. Nếu lịch là không t−ờng minh (không đảm bảo cái gì đ−ợc xếp lịch tiếp theo) thì đó đ−ợc gọi là −u tiên QT đọc yếu (weak reader). Trong tr−ờng hợp còn lại sau khi hoàn thành quyền điều khiển luôn đ−ợc trao lại cho QT ghi thì đ−ợc gọi là −u tiên QT đọc yếu hơn (weaker reader). Không tồn tại tính mập mờ đối với định nghĩa sự −u tiên QT ghi vì QT đọc luôn phải đợi cho đến khi không còn QT ghi đang chạy và QT ghi nào đợi nữa.
Các lập luận d−ới đây luôn giả thiết chọn ph−ơng án −u tiên QT đọc yếu (tức là QT ghi phải đợi cho đến khi không còn một QT đọc hay ghi nào đang xảy ra) làm cơ sở đ−a ra những ví dụ về giải pháp đồng bộ.