Trên máy đa lõi x86, hãy nói một chuỗi thực hiện trên lõi 1 tăng một số nguyên a
tại cùng một chuỗi thời gian trên lõi 2 cũng tăng nó. Giả sử giá trị ban đầu là a
là 0, cuối cùng có phải là 2
không? Hoặc nó có thể có một số giá trị khác? Giả sử rằng a
được khai báo là volatile
và chúng tôi không sử dụng các biến nguyên tử (chẳng hạn như nguyên tử <> của C++ và được xây dựng trong các hoạt động nguyên tử trong gcc).Có phải tăng số nguyên nguyên tử trong x86 không?
Nếu giá trị a
thực sự sẽ luôn là 2 trong trường hợp như vậy, điều đó có nghĩa là long int
trong x86-64 cũng sẽ có cùng một thuộc tính, tức là a
sẽ luôn là 2 cuối cùng?
trừ khi bạn đang sử dụng loại nguyên tử đặc biệt, số gia tăng thường là ba hoạt động riêng biệt. Tải, tăng, sau đó lưu trữ. –
'volatile' không cung cấp cho bạn quyền truy cập nguyên tử. –
@CatPlusPlus là tên của bạn hoạt động nguyên tử? : P – MByD