我有一堂课:
public static class Message
{
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();
private static string theMessage;
public static void SetMessage(string message)
{
Locker.EnterWriteLock();
theMessage = message;
Locker.ExitWriteLock();
}
public static string GetMessage()
{
Locker.EnterReadLock();
var msg = theMessage; // <<<=====
Locker.ExitReadLock();
return msg;
}
}如果我正确理解,在指定的行中,我将创建一个对theMessage的引用,然后返回它。多线程会访问相同的变量,还是我错了?
我是否需要调用string.Copy来确保线程安全?
谢谢
发布于 2016-10-21 23:57:53
发布于 2016-10-21 23:54:03
基于对象的类(字符串是一个)的成员分配在C#中是原子的。根本不需要锁。
如果在这两个块中有更多的代码而不是theMessage = message;和var msg = theMessage;,那么它可能是必需的,但是因为只有一个赋值才是您所做的唯一事情,所以锁定是不必要的。
https://stackoverflow.com/questions/40186884
复制相似问题