2009-07-08 3 views
11

thể trùng lặp:
How do I specify the equivalent of volatile in VB.net?dễ bay hơi tương đương trong VB.NET

từ khóa VB.NET tương đương với C# "không ổn định" là gì?

Nếu không có từ khóa cơ chế nào tương đương?

+2

Tôi có thể hỏi lý do bạn muốn biết không? Hầu hết mọi người không cố gắng viết các thuật toán đa luồng không khóa trong VB. –

+0

@EricLippert, xin lỗi nếu tôi nghe có vẻ thô lỗ, nhưng tại sao bạn hỏi "tại sao bạn muốn biết"? Nếu hầu hết mọi người không muốn tiếp cận với các vì sao - liệu những người đó, những người cố gắng, dừng lại? Tôi, cá nhân, làm rất nhiều phát triển trong VB và có thể nói rằng ngôn ngữ này là xa phía trước của hầu hết các ngôn ngữ. – Dima

+2

@Dima: Bởi vì tại thời điểm tôi ở trong nhóm thiết kế cho C# và trong tiếp xúc hàng ngày với nhóm thiết kế VB. Bằng cách thu hút phản hồi trực tiếp từ người dùng thực sự với nhu cầu thực tế và xác định nhu cầu của họ trong bối cảnh của họ, tôi có thể thể hiện rõ hơn và chính xác hơn nhu cầu của người dùng đó cho đồng nghiệp của tôi trên các nhóm thiết kế cho cả hai ngôn ngữ. Tôi rất vui khi biết rằng VB đáp ứng nhu cầu của bạn; đó là một ngôn ngữ thú vị và kỳ quặc. –

Trả lời

12

Không có sự tương đương với từ khóa biến động của C# trong VB.NET. Dễ bay hơi trong C# chỉ đảm bảo trình biên dịch xử lý mọi thứ khác nhau khi tạo IL, nhưng trình biên dịch VB.NET không có tùy chọn này.

Bạn có thể làm việc xung quanh nó theo cách này (taken from this blog post):

Function VolatileRead(Of T)(ByRef Address As T) As T 
    VolatileRead = Address 
    Threading.Thread.MemoryBarrier() 
End Function 

Sub VolatileWrite(Of T)(ByRef Address As T, ByVal Value As T) 
    Threading.Thread.MemoryBarrier() 
    Address = Value 
End Sub 
1

Tùy thuộc vào loại biến bạn sử dụng tôi sẽ đề nghị sử dụng

System.Threading.Thread.VolatileRead()

System.Threading.Thread.VolatileWrite()

Ngoài ra System.Threading.Interlocked chứa một số nội dung hay ...