Thread類中Thread.BeginThreadAffinity()
方法的用法是什麼? 這對我來說很有幫助,因爲我可以理解你是否提供了示例代碼。Thread類中Thread.BeginThreadAffinity()方法的用途是什麼?
謝謝。
Thread類中Thread.BeginThreadAffinity()
方法的用法是什麼? 這對我來說很有幫助,因爲我可以理解你是否提供了示例代碼。Thread類中Thread.BeginThreadAffinity()方法的用途是什麼?
謝謝。
在.NET 1.x中,線程始終與操作系統線程相匹配。在SQL Server團隊的要求下,.NET 2.0的這種關聯被破壞了。 CLR主機現在可以控制線程映射本身,IHostTaskManager就是這種工作界面。在blog post中有一個很好的背景。
有時代碼確實在意它運行在特定的操作系統線程上。 Windows臨界區和突變體就是一個例子。真的,任何類型的非託管代碼互操作。 Thread.BeginThreadAffinity()調用IHostTaskManager :: BeginThreadAffinity()讓主機知道該任務不應該被允許在另一個操作系統線程上運行,而是保持它當前所在的那個線程,直到調用EndThreadAffinity()。
但是,不要擔心這一點。 SQL Server項目很糟糕,他們無法得到可靠的結果。沒有跡象表明他們會再試一次。
您是否閱讀過documentation的備註部分。它很好地解釋了IMO。
公共語言運行庫 的一些主機,如Microsoft SQL Server的 2005,提供自己的線程 管理。提供其自身線程管理的主機可以隨時將 執行任務從一個物理 操作系統線程移動到另一個 。通過此切換,大多數任務不會受到影響 。但是,某些任務 具有線程關聯 - 也就是說,它們 取決於操作系統線程的物理 的標識。這些任務 必須通知主機何時執行 不應該切換的代碼。
例如,如果您的應用程序調用 的系統API,以獲取具有線程關聯的操作 系統鎖定, 作爲一個Win32 CRITICAL_SECTION這樣,你 必須 之前調用BeginThreadAffinity獲取鎖,並釋放後 EndThreadAffinity鎖定爲 。
@binarycoder,不是那個。胸圍試圖在光纖上運行sqlclr代碼。 – 2010-03-25 03:46:34