多執行緒用戶端和內容控制碼

當您有多個執行緒使用相同內容控制碼實例的多執行緒時,預設會在伺服器上序列化內容控制碼實例的存取權。 如此一來,伺服器管理員就不需要防止來自相同用戶端的另一個執行緒變更內容,或在分派呼叫時執行的內容。 不過,在某些情況下,序列化可能會影響效能。

請考慮下列事項:兩個用戶端執行緒會叫用遠端程序呼叫,但不會變更內容 (的狀態,例如,呼叫只會從它) 取得一些值。 這類呼叫不需要序列化。

在這種情況下,Windows XP 提供混合模式序列化模型,其中每個方法可能宣告為具有內容控制碼的獨佔或共用存取權。 如需詳細資訊,請參閱 coNtext_handle_serializecoNtext_handle_noserialize

在Windows XP 之前的 Windows 版本中,允許平行存取內容控制碼的唯一方式是呼叫RpcSsDontSerializeCoNtext函式,以允許在單一內容控制碼上分派多個呼叫。 呼叫 RpcSsDontSerializeCoNtext 函式並不會完全停用序列化;當內容執行發生時,內容執行常式只會在所有未完成的用戶端要求完成時執行。 RpcScDontSerializeCoNtext的呼叫會影響整個進程,而且無法還原。 不建議在 Windows XP 和更新版本中使用RpcScDontSerializeCoNtext;在處理完全非序列化環境中固有的競爭條件時,伺服器程式碼會變得非常複雜。