小编jga*_*fin的帖子

试图写一个无锁的单链表,删除麻烦

我正在尝试编写一个无锁的单链表.最终的一致性不是问题(有人遍历可能包含不正确项目的列表).

我认为我得到了正确的添加项目(循环和Interlocked.CompareExchange).

但我无法弄清楚如何删除节点(列表中的任何位置),因为我必须得到前一个项目并将它们的Next字段设置为当前节点Next字段.

class Node
{
    Node Next;
    object Value;
}

class SinglyLinkedList
{
    Root _root;

    public void Add(object value)
    {}

    public void Remove(object value)
    {}
}
Run Code Online (Sandbox Code Playgroud)

a - > b - > c

a - > c

伪代码:

Node prev;
Node node = _root;
while (node.Value != nodeValue)
{
  prev = node;
  node = node.Next;
}
prev.Next = node.Next;
Run Code Online (Sandbox Code Playgroud)

我如何使这成为一个原子操作(即确保prev.Next = node.Next调用没有next或prev被另一个线程删除)?

我可以使用ReaderWriterLockSlim,但我发现这个问题很有趣,因为我知道存在无锁链表.

我的担忧:

如果当前线程在循环和赋值之间挂起,则会发生以下情况:

  • prev 本身可能已被另一个线程删除. …

c# multithreading lock-free

15
推荐指数
1
解决办法
2719
查看次数

如何在nhibernate中使用PK删除对象?

如何在不首先从数据库中提取对象的情况下删除对象?

在另一个ORM中,我可以这样做:

session.Delete<User>(1); // 1 = PK
Run Code Online (Sandbox Code Playgroud)

nhibernate

14
推荐指数
2
解决办法
1万
查看次数

什么是C#迭代器和生成器,以及如何利用它们

我是一名VB.Net开发人员,在C#中有点新手,在查看C#文档时,我通过迭代器和生成器来了,无法完全理解使用,我有任何人可以解释(在vb中有洞察力;如果可能的话)

.net c# iterator generator enumerators

14
推荐指数
1
解决办法
1万
查看次数

asp.net mvc razor将两个项目相乘并转换为字符串

当我写 @(line.Quantity * line.Product.Price).ToString("c")的结果是

39,00.ToString("c") 
Run Code Online (Sandbox Code Playgroud)

@line.Quantity * line.Product.Price.ToString("c")结果是

2 * line.Product.Price.ToString("c") 
Run Code Online (Sandbox Code Playgroud)

如何在剃刀视图中将两个值相乘并将其转换为字符串?

asp.net-mvc razor

14
推荐指数
1
解决办法
3万
查看次数

以64位运行测试

我有一个编译为64位的ADO.NET驱动程序.因此,我需要在64位模式下运行mstests.那可能吗?

(开发机器是64位).

c# 64-bit mstest

14
推荐指数
1
解决办法
8980
查看次数

自动实现的属性的代码合同

有没有办法将合同放在.NET中自动实现的属性上?(如果答案是'是'怎么办?)?

(我假设使用DevLabs的.NET代码合同)

.net c# properties automatic-properties code-contracts

13
推荐指数
2
解决办法
2501
查看次数

比Dictionary <Type,X>更快的替代方案?

我正在创建一个我正在进行性能测试的库.在其中我生成Dictionary<Type, X>一次.这些项目目前以随机顺序插入.字典在应用程序生命周期内保持不变.

然后它经常用于查找项目.查找是库中较大的瓶颈之一.

是的,我是微观优化,但要学习.我想知道是否有更好的方法来获得查找性能?

更新

我用dotTrace来衡量性能.报告+ dotTrace在我的家用电脑中,所以我这里没有报告(否则可能会将其上传到其他地方).

我使用了这里的测试:https: //github.com/danielpalme/IocPerformance

字典定义可在此处找到:https://github.com/jgauffin/Griffin.Container/blob/master/Source/Griffin.Container/ContainerBase.cs

(我上个星期五创建了容器,不要期望太多)

UPDATE2

性能细分

Dictionary.TryGetValueResolve如果我正确地解释数字,则需要总共101ms (总共251ms),这是40.2%.

c# performance dictionary inversion-of-control

13
推荐指数
1
解决办法
3205
查看次数

正确的javascript继承

我一直在阅读很多关于javascript中"继承"的文章.其中一些使用,new而其他人推荐Object.Create.我读的越多,我就越困惑,因为它似乎存在无穷无尽的变体来解决继承问题.

有人可以向我展示最受欢迎的方式(如果有的话,还是事实上的标准)?

(我想有一个基础物体Model,我可以延伸RestModelLocalStorageModel).

javascript

13
推荐指数
2
解决办法
2841
查看次数

使用Socket或UdpClient进行多播是否有任何功能差异?

我熟悉多播等等.

使用了两个主要示例:

  1. 使用SocketBind()

  2. UDPClient.JoinMulticastNetwork()

一个指定一个LeaveMulticastGroup和另一个绑定和Joining没有LeaveMulticastGroup()

两种多播方法有什么区别,哪种方法更适合使用?

c# sockets multicast

13
推荐指数
1
解决办法
1362
查看次数

owin启动类visual studio 2012出错

我是新来的信号r,我正在尝试在c#visual studio 2012中创建一个基本的聊天应用程序,但我收到了以下错误.

The following errors occurred while attempting to load the app.
- No assembly found containing an OwinStartupAttribute.
- The discovered startup type 'SignalRTutorials.Startup, SignalRTutorials, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 
    conflicts with the type 'Microsoft.VisualStudio.Web.PageInspector.Runtime.Startup, Microsoft.VisualStudio.Web.PageInspector.Runtime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. 
 Remove or rename one of the types, or reference the desired type directly. 
 To disable OWIN startup discovery, add the appSetting owin:AutomaticAppStartup with a value of "false" in your web.config. 
 To specify the OWIN startup Assembly, Class, or Method, add the …
Run Code Online (Sandbox Code Playgroud)

c# signalr owin

11
推荐指数
2
解决办法
2万
查看次数