- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我阅读了很多不同的博客和 StackOverflow 问题,试图找到我的问题的答案,但最后我找不到任何东西,所以我想自己问这个问题。
我正在构建一个应用程序,其中有一个长时间运行的工作线程,它执行一些操作并将一些结果放入变量中。工作线程不断工作并不断产生一些结果,因此我只对结果的“当前”值感兴趣。在某些时候,另一个线程将获取工作线程运行的“当前”结果并用它做一些事情。
此类工作线程的简单实现可以如下完成:
Public Class Worker
Private _result As DateTimeOffset?
Public ReadOnly Property Result As DateTimeOffset?
Get
Return _result
End Get
End Property
Public Sub ThreadMethod()
' Do something
_result = x
' .
' .
_result = y
' .
' .
' etc
End Sub
End Class
现在假设我有一个消费者想要消费结果:
Public Class Consumer
Private _worker As Worker
Public Sub Consume()
Dim result As DateTimeOffset?
While True
' Do some work on your own
' .
' .
' Get current result
result = _worker.Result
' Do something with result
End While
End Sub
End Class
据我了解编译器的工作原理,编译器可以使 Property Result
内联,然后将 _result
变量优化到寄存器中,这似乎是合乎逻辑的一遍又一遍地读取相同的值。在 C# 中,我可以将结果标记为 volatile ,这(我认为)会阻止此类优化,但 VB.NET 中不存在该关键字。我能想到的最接近的解决方案是使用 Volatile.Write 和 Volatile.Read 方法。但是,这些方法不能与 Nullable(Of DateTimeOffset)
一起使用。
注1:虽然这个问题似乎与弱/强内存模型和内存屏障的使用有关,但我不认为它们在这种情况下有任何影响。话虽这么说,如果有人说 Thread.MemoryBarrier() 会强制从内存中进行读/写,那么这对我来说也是一个足够好的解决方案。
注2:我知道还有其他方法可以解决该问题,但我想知道该解决方案对于所描述的场景是否可行(如果问题存在,我什至不确定)。
1 Câu trả lời
sử dụngThread.MemoryBarrier
仅确保该线程中内存访问的顺序。您拥有的是访问同一变量的两个线程,因此您需要更多的保护。
该变量不是原子的,因此如果您不同步访问,您可能最终会读取部分写入的值。您可以为属性创建同步的 getter 和 setter,然后在工作线程中使用 setter 来设置值,而不是设置后备变量。
Private _result As DateTimeOffset?
Private _sync as New Object()
Public Property Result As DateTimeOffset?
Get
SyncLock _sync
Return _result
End SyncLock
End Get
Set(ByVal value as dateTimeOffset?)
SyncLock _sync
_result = Value
End SyncLock
End Set
End Property
关于.net - 在线程之间正确共享变量 (.NET/VB.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29162694/
Khi tạo một trang asp.net sử dụng .NET framework, liệu máy khách truy cập trang đó có cần phải cài đặt .NET framework trên máy tính của họ không? TỨC LÀ. Nếu người dùng truy cập www.fakesite.com/default.aspx và họ không cài đặt khung, họ
Tôi đã đọc rất nhiều blog và câu hỏi khác nhau trên StackOverflow để cố gắng tìm câu trả lời cho vấn đề của mình, nhưng cuối cùng tôi không tìm thấy câu trả lời nào cả, vì vậy tôi nghĩ mình sẽ tự hỏi câu hỏi này. Tôi đang xây dựng một ứng dụng trong đó tôi có một luồng công nhân chạy dài thực hiện một số
Đã khóa. Câu hỏi này và câu trả lời của nó bị khóa vì câu hỏi không liên quan đến chủ đề nhưng lại có ý nghĩa lịch sử. Hiện tại không chấp nhận câu trả lời hoặc tương tác mới. Tôi luôn tự hỏi tại sao Microsoft lại chọn một cái tên kỳ lạ, không thân thiện với SEO cho một nền tảng tuyệt vời như vậy. Họ chỉ
Sự khác biệt giữa .Net Framework .Net .NET Standard 1. .NET Framework Trong tương lai, .NET Framework có thể sẽ trở thành dĩ vãng, nhưng nó vẫn được sử dụng ở nhiều nơi. Bộ này
Nếu được lựa chọn, bạn sẽ đi theo con đường nào? ASP.NET Webforms + ASP.NET AJAX hoặc ASP.NET MVC + JavaScript Framework theo lựa chọn của bạn
Tôi có một dịch vụ web sử dụng dịch vụ web của bên thứ ba qua https thông qua kết nối chuyên dụng, tôi đã áp dụng ServicePointManager.ServerCertificateValidationCallback
Tại sao tôi nên chọn Ứng dụng web ASP.NET (.NET Framework) thay vì Ứng dụng web ASP.NET Core (.NET Framework)? Tôi ở đây
Tôi chưa tìm thấy bất kỳ quy ước đặt tên nào được chấp nhận chung trên web cho các giải pháp .NET có chứa các dự án .NET Standard, .NET Core và .NET Framework. Trong trường hợp của tôi, chúng tôi có những điều sau đây trong dự án .NET Framework
.NET Compact có phải là tập hợp con hoàn hảo của .NET không? Giả sử tôi đã tính đến kích thước màn hình và các hạn chế khác và tránh các lớp và phương thức mà .NET Compact không hỗ trợ hoặc .NET Compact là GUI khác và không tương thích
Tôi đã đọc tất cả các bài viết tôi có thể tìm thấy liên quan đến thiết lập maxconnection trong connectionManagement: cụ thể là http://support.microsoft.com/kb/821268
Hiện tại tôi đang sử dụng asp.net mvc và đang băn khoăn không biết nên sử dụng Json tích hợp hay Json.Net, nhưng tôi không chắc liệu cái nào có ưu điểm hơn cái nào. Ngoài ra, nếu tôi chọn đi theo con đường Json.Net, thì tôi nên chọn
Trong Visual Studio, bạn có thể tạo ít nhất ba loại thư viện lớp khác nhau: Thư viện lớp (.NET Framework) Thư viện lớp (.NET Standard) Thư viện lớp (.NET Core) Trong khi loại đầu tiên là loại chúng ta đã sử dụng trong nhiều năm,
Sự khác biệt giữa .NET và ASP.NET là gì? Chúng liên quan thế nào? Câu trả lời hay nhấtASP.Net được xây dựng trên nền tảng .Net và cung cấp các tính năng bổ sung cho việc phát triển web. Bạn có thể xem bài viết trên wikipedia
Tôi có cần cài đặt .net framework 1.1 và 2.0 trước khi cài đặt phiên bản cao hơn (3.0) không? Hay chỉ cần cài đặt riêng framework 3.0 là đủ và hỗ trợ cho phần mềm được viết trên các phiên bản framework cũ hơn? Cảm ơn, Liran Câu trả lời hay nhất Không, bạn không cần phải cài đặt framework trước đó. TÔI
Tôi đang thực hiện một dự án cho phép mọi người có thể "cập nhật" danh mục, ví dụ: thay đổi tên danh mục. Tôi nhận được thông báo sau: This is called sau khi nhấp vào nút cập nhật với câu lệnh SQL
Luồng lớp .NET System.Net.CookieContainer có an toàn không? --Cập nhật: Trả lời của Postkey -- Có cách nào để đảm bảo rằng các biến được sửa đổi trong quá trình yêu cầu không đồng bộ (tức là HttpWebRequest.Coo
Tôi đang sử dụng JScript.NET để viết các tập lệnh trong ứng dụng C# WinForms mà tôi đang viết. Nó hoạt động tốt, nhưng tôi vừa thử đưa một số xử lý ngoại lệ vào tập lệnh, nhưng tôi không biết làm thế nào để biết mã C# của tôi đang đưa ra loại ngoại lệ nào.
Tôi cần sự giúp đỡ của bạn, ví dụ tôi có một biến kiểu thập phân và tôi muốn làm tròn nó như thế này. Ví dụ: 3,0 = 3 3,1 = 4 3,2 = 4 3,3 = 4 3,4 = 4 3,5 = 4 3,6 = 4 3,7 = 4 3.
Tôi đã từng sử dụng mã như thế này: http://msdn.microsoft.com/en-us/library/dw70f090.aspx để truy cập cơ sở dữ liệu khi làm việc trong ASP.NET (2-3 năm trước). Tôi không nhận ra tôi đã
Vì ConfigurationManager không tồn tại trong .NET Standard, cách tốt nhất để lấy các thiết lập ứng dụng cho assembly đang thực thi là gì, cho dù đó là web.config hay appSettings.{env
Tôi là một lập trình viên xuất sắc, rất giỏi!