sách gpt4 ai đã đi

An toàn luồng của System.Timers.Timer so với System.Threading.Timer

In lại Tác giả: IT Prince Thời gian cập nhật: 2023-10-29 04:29:29 37 4
mua khóa gpt4 Nike

Trong bài viết này:http://msdn.microsoft.com/en-us/magazine/cc164015.aspxTuyên bố của tác giả System.Threading.Timer không an toàn cho luồng.

Kể từ đó, điều này đã được nhắc lại trên các blog, trong cuốn sách "CLR via C#" của Richter và trên SO, nhưng chưa bao giờ được chứng minh là đúng.

Mà còn Tài liệu MSDNĐảm bảo "Loại này an toàn với luồng".

1) Ai đang nói sự thật?

2) Nếu đây là bài viết gốc, điều gì đã làm cho nó Hệ thống.Threading.Timer Không an toàn cho luồng và lớp bọc của nó Hệ thống.Bộ đếm thời gian.Bộ đếm thời gian Làm thế nào để đạt được độ an toàn của luồng cao hơn?

Cảm ơn

1 Câu trả lời

Không, mọi việc không diễn ra như thế. Lớp Timer không đồng bộ .NET hoàn toàn an toàn cho luồng. Vấn đề với tính an toàn của luồng là nó không phải là thuộc tính chuyển giao, nó không thực hiện việc thực thikhác Mã cũng trở nên an toàn với luồng. Bạn là người viết mã, không phải là lập trình viên .NET Framework.

Giả định rất phổ biến rằng mã giao diện người dùng Windows về cơ bản không an toàn cho luồng cũng là một vấn đề tương tự. Điều này không đúng, mã bên trong Windows hoàn toàn an toàn với luồng. Vấn đề là tất cả mã đang chạy không phải là một phần của Windows và không được viết bởi các lập trình viên của Microsoft.Luôn luônrất nhiều Mã được kích hoạt bởi lệnh gọi SendMessage(). Nó chạy mã tùy chỉnh do các lập trình viên viết. Hoặc mã mà anh ấy không viết, chẳng hạn như một hook được cài đặt bởi một tiện ích. Giả sử chương trình không làm điều này trở nên khó khăn và chỉ thực thi mã xử lý thông báo trên một luồng. Anh ấy thường làm điều này, và nếu không làm vậy, anh ấy có thể gặp rất nhiều rắc rối.

Sự kiện System.Timers.Timer.Elapsed và lệnh gọi lại System.Threading.Timer đều có cùng một vấn đề. Khi các lập trình viên viết mã,rất nhiều sai lầm. Nó chạy hoàn toàn không đồng bộ trên một luồng nhóm luồng tùy ý và việc chạm vào bất kỳ biến chia sẻ nào đều yêu cầu khóa để bảo vệ trạng thái. Rất dễ bị bỏ qua. Tệ hơn nữa, khi mãlạiBạn có thể dễ dàng gặp phải rắc rối khi chạy trước khi lệnh gọi trước đó dừng lại. Được kích hoạt khi khoảng thời gian hẹn giờ quá ngắn hoặc máy chịu quá nhiều tải. Bây giờ có hai Các luồng chạy cùng một mã hiếm khi mang lại kết quả tốt.

Tin tức lúc mười một giờ, chủ đề khó.

Về tính an toàn của luồng trong c# - System.Timers.Timer và System.Threading.Timer, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19577296/

37 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com