cuốn sách gpt4 ai đã làm

Đồng bộ hóa có điều kiện - hệ điều hành

In lại Tác giả: Sahara Thời gian cập nhật: 2025-01-01 22:38:57 59 4
mua khóa gpt4 Nike

Đồng bộ hóa điều kiện-đồng bộ hóa điều kiện

Có hai cách để đạt được sự đồng bộ hóa: cạnh tranh (cạn tranh một biến mà hai quy trình đều muốn đọc hoặc cập nhật đồng thời dữ liệu) và hợp lý (một quy trình muốn thông báo cho một quy trình khác yêu cầu kết quả có sẵn để tranh, các loại trừ lẫn nhau (Tại); truy cập vào phần khai báo quan trọng).

Phần này giải pháp phương pháp thực hiện đồng bộ hóa điều kiện hợp lý.


Đồng bộ hóa có điều kiện là gì

Đồng bộ hóa có điều kiện có nghĩa là nhiều luồng (hoặc tiến trình) có thể tiếp tục thực hiện khi đáp ứng một số lượng điều kiện tối ưu nhất, nếu không chúng sẽ chuyển sang trạng thái chờ.

Một ví dụ đơn giản: hãy tưởng tượng bạn đang chơi một trò chơi với một người mà bạn có thể bắt được. "Chờ đợi" và "thỏa mãn điều kiện" ở đây là cốt lõi của bộ hóa hóa có điều kiện.

Từ khóa: đồng bộ.

vấn đề nhà sản xuất tiêu dùng

Vấn đề kinh điển nhất trong việc đồng bộ hóa có điều kiện là sản phẩm và tiêu dùng: nhà sản xuất sản phẩm xuất->thông báo cho người dùng tiêu dùng->người tiêu dùng tiêu dùng.

Ban đầu, tài khoản nguyên là 0. Khi tài nguyên bằng 1, người tiêu dùng sẽ có thứ gì đó để tiêu thụ. phải sản xuất tài nguyên trước đó.

Bây giờ bạn có thể sử dụng: biến boolean+wait()+notify() để đạt được điều này.

lớp công khai Thứ nguyên { riêng tư int dim = 0; riêng tư boolean done_put = FALSE; public void được đồng bộ hóa put(int d) { dim = d; // Gắn cờ các tài nguyên có sẵn thông báo(); if (!done_put) wait(); // hệ điều hành chờ return dim;

rào cản

các tiến trình không thể tiếp tục cho đến khi các luồng khác chạm tới rào cản.

Chức năng cốt lõi của Barrier là đạt được sự phối hợp và đồng bộ hóa đa luồng để đảm bảo rằng tiến trình của luồng tại một số điểm chính nhất định vẫn nhất quán. Chặn rào cản, mục đích: để đạt được thứ tự, các luồng có mức độ ưu tiên cao được thực thi trước so với các luồng có mức độ ưu tiên thấp (khi các luồng này thực thi mã trong một khu vực nhất định, chúng không thể được thực thi trước mà chúng phải được rào cản tại điểm rào cản. Sau đó cái có mức ưu tiên cao nhất sẽ được thực thi trước).

lớp công khai Rào cản { public void được đồng bộ hóa tạm dừng() { wait(); } public void được đồng bộ hóa sơ yếu lý lịch_one(){ thông báo() } }

Thực hiện rào cản ưu tiên

Chuỗi có mức độ ưu tiên cao nhất sẽ được giải phóng mỗi lần.

Gồm hai phần: tạm dừng;

  • public void được đồng bộ hóa tạm dừng(){ } được sử dụng để tạm dừng phán đoán và cài đặt ưu tiên và giải phóng mức cao nhất (thay thế), so sánh mức cao nhất thứ hai (thay thế), thực hiện wait() while (p>hightest);

  • public void đã đồng bộ hóa sơ yếu lý lịch_one(){ } được sử dụng để bắt đầu lại một vòng.

lớp công khai Barrier{ int hightest=0; int next_high=0; public void đã đồng bộ hóa tạm dừng(){ int p; if(p=(getPriority())>hightest){ next_high=highest } else if(p; =(getPriority())>next_high){ next_high=p; } thực hiện wait()while(p

Bộ đếm giới hạn

Bộ đếm giới hạn là một cơ chế đồng bộ hóa trong lập trình đa luồng, chủ yếu được sử dụng để giới hạn số lượng đồng thời tối đa của một số tài nguyên hoặc hoạt động nhất định. Nó hoạt động tương tự như semaphore nhưng tập trung nhiều hơn vào việc đếm và kiểm soát phạm vi.

Bộ đếm giới hạn là bộ đếm có giá trị tối đa cố định (giới hạn trên) và giá trị tối thiểu (giới hạn dưới). Nó thường được sử dụng để kiểm soát việc sử dụng tài nguyên nhằm ngăn chặn việc vượt quá giới hạn tối đa hoặc giảm xuống dưới giới hạn dưới.

Số lượng tài nguyên được chia thành một vùng MIN, MAX.

Nếu nhỏ hơn MIN thì người tiêu dùng không thể tiêu dùng nhưng người sản xuất có thể thêm vào.

Lớn hơn MAX, người sản xuất không thể sản xuất nhưng người tiêu dùng có thể tiêu dùng.

Thông báo lẫn nhau và kiểm soát linh hoạt số lượng tài nguyên duy trì trong một phạm vi nhất định.

public class BoundedCounter triển khai IBoundedCounter{ long count=MIN; public void được đồng bộ hóa inc(){ while(count==MAX) wait(); if(count++==MIN) notificationAll();//thông báo cho người tiêu dùng tiêu thụ} public void được đồng bộ hóa dec(){ while(count==MIN) wait(); if(count--==MAX) notificationALL();//thông báo cho nhà sản xuất (chưa đạt MAX, vui lòng đến sản xuất sớm) } }
  • Các phán đoán có điều kiện đều bằng ranh giới; while()+wait; if+notifyall().

  • public void được đồng bộ hóa inc() được sử dụng để thêm tài nguyên và public void được đồng bộ hóa dec() được sử dụng để tiêu thụ tài nguyên.

Semaphores thực hiện vùng giới hạn

Thiết lập ba semaphores:

  • riêngSemaphore mutex = new Semaphore(1);Kiểm soát loại trừ lẫn nhau.

  • riêng tưSemaphore space_avail =Semaphore mới(10);Không gian kiểm soát.

  • Semaphore riêng tư item_avail =Semaphore mới(0); Kiểm soát số lượng mục.

Trong số đó, không gian và vật phẩm bổ sung cho nhau.

Ban đầu, không gian là 10 và mục là 0.

class BoundedBuffer{ riêng Vector buf=new Vector(); riêng Semaphore mutex=new Semaphore space=new Semaphore(10); riêng Semaphore mutex=new Semaphore(0); ) VV return (dấu cách đầu tiên sau đó là mục) public void put(int item){ space.P(); buf.addElement(item); mutex.V(); item.V(); } //get: PP RemoveElementAt(0) VVR (item đầu tiên, sau đó là dấu cách) public int get() { item_avail.P(); . P(); int item =buf.removeElementAt(0); mutex.V(); space_avail.V();

Cuối cùng, bài viết về đồng bộ hóa có điều kiện - hệ điều hành này kết thúc tại đây. Nếu bạn muốn biết thêm về hệ điều hành - đồng bộ hóa có điều kiện, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai. .

59 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress