Một câu hỏi nhanh tôi đã tự hỏi về một thời gian; CPU có gán các giá trị nguyên tử không, hoặc là bit từng chút một (ví dụ như một số nguyên 32 bit).
Nếu nó từng chút một, một chuỗi khác có thể truy cập vào vị trí chính xác này có được "phần" của giá trị được gán không?CPU có gán giá trị nguyên tử cho bộ nhớ không?
Hãy nghĩ về điều này:
Tôi có hai chủ đề và một biến "unsigned int" được chia sẻ (gọi nó là "g_uiVal").
Cả hai luồng đều lặp lại.
Bật đang in "g_uiVal" với printf ("% u \ n", g_uiVal).
Thứ hai chỉ tăng số này.
Chủ đề in có bao giờ in một cái gì đó hoàn toàn không hoặc một phần của giá trị "g_uiVal" không?
Trong mã:
unsigned int g_uiVal;
void thread_writer()
{
g_uiVal++;
}
void thread_reader()
{
while(1)
printf("%u\n", g_uiVal);
}
Có thể truy cập vào các giá trị 32 bit qua các dòng bộ nhớ cache trong những ngày này không? –
@Lasse: Nhiều bộ vi xử lý dành cho máy tính để bàn hiện đại cho phép đọc và viết không được ký hiệu, nhưng ở mức phạt đáng kể về hiệu suất. CPU cũ hơn hoặc nhỏ hơn (ví dụ: các thiết bị nhúng) có xu hướng không. Trong một thời gian, điều này đã được phân chia giữa các bộ vi xử lý CISC (có xu hướng hỗ trợ đọc và viết chưa được ký) và bộ xử lý RISC (không), nhưng sự khác biệt đang làm mờ ở đây. – leander
8, 16 và 32 bit vi điều khiển là tất cả phổ biến. Trên một AVR (với 8 bit tải và các cửa hàng) có thể có một ISR (gián đoạn dịch vụ thường xuyên) hoặc thread khác (nếu bạn đang chạy một hệ điều hành đa nhiệm có thể được ưu tiên) viết một phần của biến (hoặc chỉ đọc một phần của thay đổi chuỗi đã tạo trước đó). – nategoose