我了解C#中的会话以及如何定义它们。但是今天我听到了一个术语“无锁会话”。我用谷歌搜索,但没有得到与我的问题完全匹配的答案。谁能解释一下C#中的无锁会话,以及如何为它们编写代码?
最佳答案
这是msdn部分Concurrent Request and Session State
中的一些内容
对ASP.NET会话状态的访问是每个会话的独占,这意味着如果两个不同的用户发出并发请求,则将同时授予对每个单独会话的访问权限。但是,如果对同一会话提出了两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的互斥访问。仅在第一个请求完成后才执行第二个请求。 (如果由于第一个请求超过了锁定超时而释放了对该信息的排他锁,则第二个会话也可以访问。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则该请求为只读会话信息不会导致会话数据互斥锁定。但是,对会话数据的只读请求可能仍必须等待会话数据的读写请求设置的锁定才能清除。
因此,每当并发请求带有相同的sessionId时,它都将进入互斥锁。要创建无锁会话,只需按照MSDN上的上述文档将EnableSessionState
设置为ReadOnly
。这称为无锁会话。
注意:将EnableSessionState指定为ReadOnly时。 asp.net不会在会话上获得任何排他锁,最终它还会使该会话成为该页面的只读。
这是关于另一个Stack溢出线程上asp.net中的会话锁的很好的讨论:-link
关于c# - 什么是C#中的无锁 session ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27957295/