Trong C++ đa luồng chương trình rỗng, tôi có tương đương với chạy này trong một thread:trong khi vòng lặp không kiểm tra tình trạng
while(obj->member) { } // waiting for obj->member to be set to false in another thread
và trong chủ đề khác, obj-> thành viên được thiết lập là false. Ngay cả khi nó được đặt thành false, tuy nhiên, vòng lặp không bị ngắt. Nếu tôi thay đổi nó thành:
while(obj->member) { Sleep(1) }
Nó hoạt động như mong đợi và ngắt khi obj-> thành viên được đặt thành sai trong chuỗi khác.
Tại sao nó hoạt động như thế này?
Vui lòng không sử dụng chế độ chờ bận - tìm hiểu về biến điều kiện hoặc nguyên thủy đồng bộ hóa tương tự. – Arkadiy
Cái gì? Tôi không có ý tưởng gì đó có nghĩa. – Hock
Tôi sẽ thứ hai những gì @Arkadiy nói (và nếu bạn không có ý tưởng điều đó có nghĩa là gì, bạn cần phải làm rất nhiều đọc trước khi bạn viết bất kỳ mã đa luồng hơn). Ngoài việc chờ đợi bận rộn (mà chỉ là hình thức xấu), mã của bạn cũng không phải là chủ đề an toàn. Với sự đơn giản của những gì bạn đang làm _trong trường hợp chính xác này, tuy nhiên, tôi không nghĩ rằng bạn sẽ gặp phải một vấn đề trên bất kỳ cấu trúc CPU thông thường nào. – rmeador