Tôi có một số mã đa luồng (xem câu hỏi Windows API Thread Pool simple example) mà tôi đang sử dụng bộ đếm để xác định chuỗi.InterlockedIncrement vs EnterCriticalSection/counter ++/LeaveCriticalSection
Tôi đã được khuyên nên sử dụng một InterlockedIncrement để tăng bộ đếm này trong chức năng gọi lại của luồng. Tuy nhiên điều này dường như không khóa đúng biến, vì tôi gặp phải một số vấn đề tương tranh. Tôi thay thế các InterlockedIncrement bằng cách sử dụng một phần quan trọng bằng tay: EnterCriticalSection/counter ++/LeaveCriticalSection và điều này bây giờ hoạt động hoàn hảo.
Tại sao lại như vậy? Không phải là hai lựa chọn được cho là hoàn toàn tương đương? Lưu ý rằng tôi đang nói về việc khởi chạy chỉ một vài (khoảng 10) chuỗi.
Theo cách nào dường như không khóa đúng biến? Bạn gặp phải sự cố đồng thời nào? – LukeH
'InterlockedIncrement' và bạn bè không cần khóa. Các hướng dẫn lắp ráp đơn thực hiện. Bạn có thể mô tả thêm về các vấn đề bạn đang thấy không? – Nate
LukeH: bộ đếm không phải lúc nào cũng đưa ra một dãy số nguyên liên tục tăng dần. Đôi khi bộ đếm, bắt đầu từ 0, đang thực hiện: 0 1 2 2 4 5 ... – WhitAngl