在服务器上的应用程序,我需要分配给每个连接的客户端的唯一的ID,所以我做这种方式:2对锁的性能问题/使用
private short GetFreeID()
{
lock (this.mUsedPlayerIDsSynchronization)
{
for (short I = 1; I < 500; I++)
{
if (ClientIDPool[I] == false)
{
ClientIDPool[I] = true;
return I;
}
}
return -1;
}
}
我的第一个问题:难道做更高效,我的意思是更好的表现?我在这里读到,我们应该学会编写没有锁的代码。我也读过一些原子操作还有其他选项。 第二个问题:如果我想锁定整个班级以便不允许在其中进行任何更改,该怎么办?例如:一个客户端会更新第二个客户端数据,我可以锁定整个第二个客户端类别,它是绝对被阻止的吗?我仍然认为“锁定”只会确保其代码段中的代码当时只有一个线程进入,所以我不知道“锁定(client2)”是否会导致该类中的任何内容都不能更改,直到此锁定为止释放。
如果您确实需要性能,任何形式的CPU辅助同步都会干扰它 - 完全停止。联锁指令比普通锁更好 - 但仅限于短期。 (锁定一个总线来改变一个4字节的值不是很好= D)。 – 2009-12-22 13:39:56