2010-02-25 34 views

Trả lời

3

gì bạn đang yêu cầu được gọi là Software Transactional Memory. Do đây hiện là khu vực nghiên cứu mở và hiện tại không có hỗ trợ ngôn ngữ C# nào, bạn có thể sử dụng số existing synchronization options for C#, chẳng hạn như từ khóa lock, màn hình, tay cầm chờ đợi, v.v.

Nếu bạn thực sự cần các tính năng giao dịch nâng cao, có rất nhiều library implementations, ví dụ: < chỉnh sửa> SXM bởi Microsoft Research STM.NET </edit>.

+0

Tôi biết đây là một câu trả lời cũ (và câu hỏi), nhưng tôi đã chỉ tự hỏi về C# giao dịch cho các hoạt động trong bộ nhớ, và thấy điều này. Tuy nhiên, các liên kết đến STM.NET dường như đã chết. Dự án đã bị ngưng không? Có cách nào khác không? – Shaamaan

+1

@Shaamaan: Liên kết Wikipedia cũng có danh sách triển khai: https: // vi.wikipedia.org/wiki/Software_transactional_memory#C.23 – Heinzi

0

Không có transactioning giống SQL cho C# đối tượng, nhưng nếu điều này bởi vì bạn có vấn đề luồng, bạn nên sử dụng lock:

lock (myList) 
{ 
    if (myList.Count > 0) 
     myList.Clear(); 
} 

này chỉ đơn giản là xóa một danh sách nhưng đảm bảo nó không thể được sửa đổi bởi một chủ đề khác cùng một lúc.

1

Để có một cuộc thảo luận tốt đẹp về cách thực hiện giao dịch trong OOP hãy xem số discussion này. Có các mẫu lưu trữ và trạng thái được đánh dấu để đạt được hành vi giao dịch (trong số các phương thức khác).

3

Bạn có thể quan tâm Software Transactional Memory. Nó tồn tại một triển khai trong thế giới .NET, có tên là STM.NET.

Bộ nhớ giao dịch phần mềm (STM.NET) là cơ chế để tách biệt trạng thái chia sẻ hiệu quả . Lập trình viên phân định ranh giới một vùng mã khi hoạt động trong một giao dịch mà là "nguyên tử" và "bị cô lập" từ mã khác giao dịch đang chạy đồng thời.

Dưới đây là blog của nhóm nghiên cứu Microsoft STM.NET: http://blogs.msdn.com/stmteam/

+0

Bạn đúng về STM, nhưng đừng quên lưu ý rằng STM vẫn đang trong quá trình nghiên cứu, phát triển và tôi sẽ không sử dụng nó trong phần mềm sản xuất. – Steven

1

Hãy xem Bộ nhớ giao dịch phần mềm (STM.NET).

Nó không làm cho nó vào Net 4 nhưng có sẵn như là một download riêng

1

Có một Interesting article trên blog của Joe Duffy về nỗ lực để làm bộ nhớ giao dịch tại MS. Nếu tôi tổng hợp nó, tôi sẽ nói: Chỉ làm điều này cho mình nếu nó là cho vui.

0

Bạn có thể sử dụng TransactionScope Class.

+0

điều này hoàn toàn không chính xác, TransactionScope chỉ được sử dụng cho DB – Idan

+0

Humm .. no. Nó có thể được sử dụng cho bất cứ điều gì thực hiện IEnlistmentNotification – vtortola

Các vấn đề liên quan