Vòng while(!done) treo vĩnh viễn ở -O2 — volatile cứu được, nhưng đừng tưởng nó làm biến an toàn đa luồng
Một vòng while(!done) treo vô hạn ở -O2 vì trình dịch đọc done một lần rồi cache; volatile ép đọc lại mỗi vòng. Nhưng volatile chỉ đảm bảo truy cập xảy ra, không phải nguyên tử hay thread-safe. Đo bằng assembly trong container.