我有一个方法,接受一个字符串入参,方法会被并发调用,我想在传入相同字符串的调用间上锁,比如有两个线程同时传入"abc"调用该方法,那我希望他们不能同时进入,需等一个完成另一个才进入。与此同时,另一个线程传入"xyz"的调用则不受影响。所以我应该锁什么?
void Foo(string s) {
lock(what) { } // ???
}
我现在锁的是String.Intern(s)
,但了解到这样会增加不可回收的驻留字符串,而这个方法在程序运行期间是会被传入无数不同的字符串调用无数次的,所以驻留下来的字符串会很可观,所以我想改进。
求支招,谢谢!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…