C ++ dễ bay hơi

C De Bay Hoi

“Các nhà phát triển ứng dụng không gian người dùng nên luôn tham khảo hướng dẫn sử dụng trình biên dịch liên quan để tìm hiểu cách bộ định tính có thể được xử lý trong các ngữ cảnh khác nhau vì hành vi từ khóa dễ bay hơi thường được xem là phụ thuộc vào phần cứng. Khi một đối tượng được đánh dấu là dễ bay hơi, trình biên dịch thường được thông báo rằng nó không bao giờ được tối ưu hóa cho các hoạt động tải và phải luôn được truy xuất từ ​​bộ nhớ chính thay vì thanh ghi hoặc bộ nhớ đệm. Tuy nhiên, khi trình biên dịch cố gắng đưa vị trí bộ nhớ vào thanh ghi, nó sẽ tự động được lưu vào bộ nhớ đệm mặc dù có nhiều tầng bộ nhớ đệm phần lớn không có sẵn cho phần mềm và chỉ được duy trì trong phần cứng. Do đó, RAM có thể được truy cập nhanh hơn nhiều lần từ các dòng bộ nhớ cache gần CPU so với từ cùng một vị trí bộ nhớ.

Các vấn đề có thể xảy ra nếu chúng tôi không sử dụng bộ định tính dễ bay hơi bao gồm, khi tối ưu hóa được bật, mã có thể không hoạt động như mong đợi. Khi các ngắt được sử dụng và kích hoạt, mã không thể hoạt động như kế hoạch. Dữ liệu chỉ được giữ lại trong bộ nhớ dễ bay hơi khi bật nguồn. Khi nguồn cung cấp bị loại bỏ, mất dữ liệu sẽ xảy ra.

Tuy nhiên, lưu trữ bất biến giữ dữ liệu ngay cả khi mất điện. Thông tin quy trình được lưu trữ trong thời gian ngắn trên bộ nhớ dễ bay hơi vì nó nhanh hơn đáng kể so với bộ lưu trữ không bay hơi. Trái ngược với lưu trữ không bay hơi, lưu trữ dễ bay hơi phù hợp hơn để bảo vệ dữ liệu nhạy cảm. Điều này là do dữ liệu không thể truy cập được khi nguồn điện bị ngắt. Chi phí lưu trữ dễ bay hơi vì hệ thống máy tính chỉ có thể chứa vài MB đến vài GB trong số đó ”.







Thuộc tính của Bộ định tính dễ bay hơi trong C ++

Phương tiện định tính dễ bay hơi của C ++ sẽ được trình bày ở đây. Khi chúng tôi khai báo một biến, giá trị định tính “biến động” được áp dụng. Nó phục vụ như một lời nhắc nhở cho trình biên dịch rằng giá trị có thể thay đổi bất cứ lúc nào. Sự dễ bay hơi có một số đặc điểm được liệt kê dưới đây.



• Không thể thay đổi chỉ định bộ nhớ bằng từ khóa biến động.



• Không thể lưu trữ các biến của thanh ghi.





• Về mặt phân công, giá trị không thể thay đổi.

Cách sử dụng Bộ định tính dễ bay hơi trong C ++

1. Mặc dù mã của bạn không sửa đổi giá trị của biến, nhưng nó vẫn có thể làm như vậy. Kết quả là, mỗi khi trình biên dịch kiểm tra trạng thái của biến, nó không thể giả định rằng nó giống với giá trị gần đây nhất được đọc từ nó hoặc giá trị gần đây nhất được lưu trữ; thay vào đó, nó phải nhận giá trị của biến một lần nữa.



2. Trình biên dịch không bắt buộc phải loại bỏ hành động lưu trữ một giá trị vì nó là một “tác dụng phụ” có thể nhìn thấy từ bên ngoài và xảy ra khi một giá trị được lưu trong một biến biến động. Ví dụ: nếu hai giá trị được đặt trong một hàng, trình biên dịch phải đặt giá trị hai lần.

Cú pháp của Bộ định tính dễ bay hơi trong C ++

# Biến_thông_số_liệu_tạo_thượng

Từ khóa biến động phải được sử dụng trong khai báo và kiểu dữ liệu đề cập đến bất kỳ kiểu dữ liệu nào, bao gồm double, float hoặc integer. Cuối cùng, chúng tôi chọn một tên cho biến. Chúng ta có thể xác định một biến biến động bằng cách sử dụng một trong hai phương pháp vì cả hai khai báo đều hợp lệ.

Ví dụ: Bộ định tính dễ bay hơi được sử dụng để xác định các đối tượng có thể được sửa đổi bởi các chủ đề khác hoặc các hành động bên ngoài trong C ++

Nếu đối tượng bị thay đổi bởi một tín hiệu bên ngoài hoặc một thủ tục hoạt động như một ngắt, thì giá trị đã thay đổi cần được truy xuất từ ​​RAM vì trạng thái được lưu trong bộ nhớ cache không còn phù hợp trong thời gian chờ đợi. Kết quả là, trình biên dịch xử lý quyền truy cập vào các đối tượng dễ bay hơi một cách thích hợp.

#include
#include
#include

sử dụng std :: cout ;
sử dụng std :: endl ;
sử dụng std :: chứng nhận ;
sử dụng std :: Ăn ;

bay hơi int giây = 0 ;

vô hiệu DelayFiveSeconds ( ) {
trong khi ( giây < 3 ) {
bạn ngủ ( 200000 ) ;
chứng nhận << 'đang chờ đợi...' << endl ;
}
}

vô hiệu Số giây tăng dần ( ) {
( int tôi = 0 ; tôi < 5 ; ++ tôi ) {
ngủ ( 1 ) ;
chứng nhận << 'tăng lên ' << endl ;
giây = giây + 1 ;
}
}

int chính ( ) {
cấu trúc thời gian bắt đầu { } ;
cấu trúc thời gian kết thúc { } ;
std :: chủ đề thread1 ;

thread1 = std :: chủ đề ( Số giây tăng dần ) ;

DelayFiveSeconds ( ) ;

luồng1. tham gia ( ) ;
trở về EXIT_SUCCESS ;
}


Để minh họa kịch bản tiềm năng, chúng tôi đã sử dụng từ khóa dễ bay hơi có biến được khai báo là Giây của kiểu dữ liệu “int” và gán giá trị 0 cho nó. Sau đó, chúng tôi xây dựng hai hàm: một hàm là “DelayFiveSeconds” thay đổi biến số nguyên dễ bay hơi toàn cục và một hàm khác là “IncrementSeconds” thực hiện cùng một đánh giá bên trong vòng lặp while. Cần lưu ý rằng ví dụ này cho phép vòng lặp while lặp lại trên giây khi giây phải nhỏ hơn 3.

Khi điều kiện đáp ứng, khối while sẽ được thực thi. Bên trong khối while, chúng tôi đã gọi phương thức không ngủ để in ra câu lệnh “chờ đợi”. Hàm 'IncrementSceonds' có vòng lặp for. Sau khi lặp lại, phương thức sleep được gọi, phương thức này sẽ in ra câu lệnh “tăng dần” và tăng biến “giây”. Việc thực thi ban đầu của chức năng 'IncrementSeconds' được thực hiện bởi một luồng riêng biệt được tạo bởi chức năng chính. Sau đó, phương thức 'DelayFiveSeconds' được gọi bởi chuỗi chính, nhập một vòng lặp sẽ không kết thúc nếu biến giây không di chuyển trên giá trị 5.

Ngay sau khi luồng chính thông báo giá trị của biến giây đã thay đổi, nó sẽ trả về từ phương thức vì một luồng khác đã bắt đầu tăng giá trị đó đồng thời.

Để chạy mã luồng trong C ++, chúng ta nên sử dụng lệnh “g ++ -pthread –o filename filename.cc”. Nếu bạn không triển khai “-pthread” trong lệnh, thì có khả năng trình biên dịch sẽ đưa ra một ngoại lệ. Kết quả là, chúng tôi đã thực hiện một cách hiệu quả một hàm chờ có điều kiện đợi cho đến khi đối tượng dễ bay hơi bị thay đổi bởi một lực bên ngoài. Điều quan trọng cần lưu ý là khối mã cập nhật có thể đến từ một phần dịch khác hoặc hành động tín hiệu bên ngoài, mặc dù mã này sẽ vẫn hoạt động như cũ nếu bộ định tính biến động bị loại bỏ và một biến tổng thể thông thường được sử dụng.

Sự kết luận

Ở đây, chúng ta cùng tìm hiểu tổng quan về Volatile trong C ++ cùng với cú pháp, cách sử dụng và các ví dụ thích hợp để hiểu rõ hơn. Vì trình biên dịch không thể dự đoán giá trị, nên tính dễ bay hơi là rất quan trọng trong lập trình C. Lợi ích chính của việc sử dụng biến đổi là giá trị của nó có thể thay đổi bất cứ khi nào người dùng yêu cầu nó được sửa đổi hoặc khi một số luồng khác sử dụng cùng một biến đang hoạt động.