簡體   English   中英

C#中的無鎖會話是什么?

[英]What are the lock-free sessions in C#?

我知道C#中的會話以及如何定義它們。 但是今天我聽到了無鎖會話這個詞。 我用Google搜索,但沒有得到任何與我的問題完全匹配的答案。 任何人都可以解釋一下C#中的無鎖會話以及如何為它們編寫代碼嗎?

以下是msdn部分Concurrent Request and Session State一些內容

對會話狀態的訪問是每個會話獨占的,這意味着如果兩個不同的用戶發出並發請求,則同時授予對每個單獨會話的訪問權限。 但是,如果對同一會話發出兩個並發請求(通過使用相同的SessionID值),則第一個請求將獲得對會話信息的獨占訪問權。 第二個請求僅在第一個請求完成后執行。 (如果由於第一個請求超過鎖定超時而釋放信息的獨占鎖定,則第二個會話也可以訪問。)如果@ Page指令中的EnableSessionState值設置為ReadOnly,則只讀請求會話信息不會導致會話數據的獨占鎖定。 但是,會話數據的只讀請求可能仍然必須等待由會話數據的讀寫請求設置的鎖定才能清除。

因此,只要並發請求帶有相同的sessionId,它就會進入獨占鎖。 要創建無鎖會話,您只需按照上述MSDN文檔將EnableSessionState設置為ReadOnly 這稱為無鎖會話

注意:將EnableSessionState指定為ReadOnly時。 asp.net不會獲得會話的任何獨占鎖定,並最終它也會使會話成為該頁面的只讀。

以下是另一個Stack溢出線程中關於asp.net中會話鎖的非常好的討論: - 鏈接

會話狀態模塊實現readers – writers locking mechanism寫入readers – writers locking mechanism ,並對對會話狀態值的訪問進行排隊。 具有會話狀態寫訪問權限的頁面將在會話上保持寫入程序鎖定,直到請求完成。 通過將@Page指令上的EnableSessionState屬性設置為True,頁面獲得對會話狀態的寫訪問權。 具有會話狀態讀取訪問權限的頁面(例如,當EnableSessionState屬性設置為ReadOnly )將在會話中保持讀取器鎖定,直到請求完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM