私はC#アプリケーションでマルチスレッドについて何かを理解しようとしています。私はSecurityComponentBaseと呼ばれる基本クラスで次のコードを持つアプリケーションを継承:いつC#ベースクラスで辞書をロックする必要があるのですか?
m_permissionsLock.EnterWriteLock();
try
{
if (m_grantedPermissions.Count > 0)
{
m_grantedPermissions.Clear();
m_loggingComponent.WriteSecurityLog(
"Security permissions cleared for user: " + CurrentLoggedUser.Username);
}
foreach (var p in permisions)
{
m_loggingComponent.WriteSecurityLog("Security permission: "+ p.PermissionName + " Granted to user: " + userName);
m_grantedPermissions.Add(p.PermissionName, p);
}
}
finally
{
m_permissionsLock.ExitWriteLock();
}
m_permissionsLockを次のように定義される。
private readonly Dictionary<string, Permission> m_grantedPermissions = new Dictionary<string, Permission>();
:m_grantedPermissionsのように定義される
private readonly ReaderWriterLockSlim m_permissionsLock = new ReaderWriterLockSlim();
開発者は彼がにを持っていることを知っていますか?私にとっては、他のスレッドがどこから来るのか分からない。私はこのマルチスレッドのことを初めて覚えていることを覚えておいてください。しかし、私はこれをやらなければならないことをどのように知っていますか?
プライベートメンバー変数です。あなたのクラスだけがアクセスできます(あなたが他の公共のプロパティやメソッドを介して渡している場合を除きます)。したがって、あなたはそれがどのようにアクセスされているか知っています。クラスをスレッドセーフにするには、辞書を使用するすべてのメソッドが適切にロックされている必要があります。 – lesscode