熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NET 4.0函數式編程與協調數據結構

2022-06-13   來源: .NET編程 

  協調數據結構(Coordination Data StructuresCDS)是在NET 中包含的一套線程安全對象其中大部分是集合類型在沉寂了個月之後這些內容終於有了重大的更新其中最明顯的部分莫過於引入了函數式編程技術從而減少了設計模式的使用

  一個新類型是ConcurrentLinkedList它使用一個predicate函數並配合TryInsertBetween方法以線程安全的方式插入節點這個predicate函數會被對象本身多次調用用於確定合適的插入位置這樣即使在單線程的情況下它使用起來也比普通的LinkedList要方便一些

  另一使用函數式技巧的地方是SpinWait對象開發人員可以向SpinWaitSpinUntil方法傳遞一個predicate函數而不是一遍又一遍地手動調用SpinOnce方法

  下一個則是新類型ConcurrentBag這好比是一個對多線程進行附載均衡的隊列集合普通情況下每個線程只對其自己的隊列進行讀寫不過在隊列為空時它就會從其它線程的隊列中竊取一些元素這意味著在大多數情況下線程之間不會出現資源競爭但是每個線程在所有工作完成之前依然會全力以赴ConcurrentBag並非ConcurrentQueue的替代品後者依然是單生產者/單消費者場景下更好的選擇

  WriteOnce類已被移除——這個功能似乎並不怎麼有用它只是在setter被訪問多次的情況下拋出異常而已相比之下Lazy和LazyVariable類型更為有用一些因此它們被保留了下來這兩者都體現了延遲初始化的特性(因此又被稱為futures)前者是一個類而後者則是一個輕量的但並非絕對線程安全的結構此外類庫中新增了LazyInitializer用於處理內存占用(memory footprint)成為問題的情況還有ThreadLocal類它可以將線程本地資源和Futures線程安全地綁定起來

  安全地取消任務而不引發線程取消異常依舊是一個重要的方面為了改善這個問題每個可能會帶來阻塞的方法都添加了取消的功能微軟目前依然在各處引入任務取消模型這樣可以大大簡化類庫的開發難度


From:http://tw.wingwit.com/Article/program/net/201311/15408.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.