私はクラスを持っている:ReaderWriterLockSlimと参照
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
に電話をかけて、スレッドセーフであることを確認する必要がありますか? (文字列が1である)オブジェクトベースクラスの
おかげ
しかし、私はまだtheStringのコピーを作成する必要がありますか? – sooqua
文字列は不変です。一度インスタンスを取得すると内部状態が変更されることはありません。 'Substring(4)'や 'Trim()'のような関数はすべて、新しい***文字列を返します。 –