首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# - 如何获取互斥锁的所有者名称

在 C# 中,可以使用 Mutex 类来实现互斥锁。要获取互斥锁的所有者名称,可以使用 Mutex.GetAccessControl() 方法来获取互斥锁的访问控制信息,然后使用 MutexAccessRuleCollection 类的 GetEnumerator() 方法来遍历所有访问规则,并获取所有者名称。

以下是一个示例代码:

代码语言:csharp
复制
Mutex mutex = new Mutex(false, "MyMutex");
MutexSecurity mutexSecurity = mutex.GetAccessControl();
MutexAccessRuleCollection rules = mutexSecurity.GetAccessRules(true, true, typeof(SecurityIdentifier));
foreach (MutexAccessRule rule in rules)
{
    Console.WriteLine($"Owner: {rule.IdentityReference.Value}");
}

在这个示例中,我们首先创建了一个名为 MyMutex 的互斥锁,然后使用 GetAccessControl() 方法获取其访问控制信息。接着,我们使用 GetAccessRules() 方法获取所有访问规则,并遍历这些规则,使用 IdentityReference.Value 属性获取所有者名称并输出。

需要注意的是,如果互斥锁没有设置访问规则,则上述代码将不会输出任何内容。此外,如果互斥锁的所有者是一个 Windows 用户帐户,则需要使用 rule.IdentityReference.Translate(typeof(NTAccount)).Value 来获取该用户帐户的名称。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用Mutex进行线程处理

Mutex就像一个C#(lock),但它可以跨多个进程工作。换句话说,Mutex可以是计算机范围,也可以是应用程序范围。 Mutex是一个同步原语,也可用于进程间同步。...Mutex是一个同步原语,它只允许对一个线程共享资源进行独占访问。如果一个线程获得了一个Mutex,那么想要获取该Mutex第二个线程将被挂起,直到第一个线程释放Mutex。...与lock语句一样,Mutex只能从获取同一个线程中释放。 以下示例显示如何使用本地Mutex对象来同步对受保护资源访问。...当它由一个线程拥有时,在原始线程所有者释放它之前,其他线程不能拥有它。想要拥有互斥对象线程调用互斥对象实例WaitOne()方法。想要释放互斥拥有线程调用ReleaseMutex()方法。...如果对互斥命名,那么它就有资格成为可以从多个进程访问系统级别的互斥。如果互斥未命名,则它是一个匿名互斥,只能在创建互斥进程内访问。

38420

dotnet C# 如何正确获取藏文字数

在咱国内有很多有趣文字,其中藏文属于有趣文字里面特别有趣一项,特别是对于做文本库同学,大概都知道什么叫合写字吧。合写字含义就是多个字符一起组成一个字。...但是多个字符在内存中,本身就是多个字符对象,以往统计某个字符串字数,咱简单判断只是拿字符串字符数量进行获取。...用 string.Length 获取 དིོེུ 这个字也是符合预期 5 个字符,当然这也是不符合预期字数 这是关于语言文化方面的内容,自己写一定是不靠谱。...好在 .NET 里面提供权威获取方法,通过 StringInfo 类辅助,可以获取可视效果下字符串字数 var info = new StringInfo("དིོེུ"); var realLength...= info.LengthInTextElements; // realLength = 1 通过此即可获取正确字符长度 额外,如果想要枚举一个藏文句子每个藏文字。

72610

【高并发】如何使用互斥解决多线程原子性问题?这次终于明白了!

一文,我们得知在32位多核CPU上读写long型数据出现问题根本原因是线程切换带来原子性问题。 如何保证原子性? 那么,如何解决线程切换带来原子性问题呢?答案是保证多线程之间互斥性。...如果我们能够保证对共享变量修改是互斥,那么,无论是单核CPU还是多核CPU,都能保证多线程之间原子性了。 模型 说到线程之间互斥,我们可以想到在并发编程中使用来保证线程之前互斥性。...线程进入临界区之前,会首先尝试加锁操作lock(),如果加锁成功,则进入临界区执行临界区中代码,则当前线程持有;如果加锁失败,就会等待,直到持有线程释放后,当前线程获取进入临界区;进入临界区线程执行完代码后...1,该线程即为monitor所有者。...也就是说,getCount()方法和incrementCount()方法获取是两个不同,二者临界区没有互斥关系,incrementCount()方法对count变量修改无法保证对getCount

69810

如何获取 C# 类中发生数据变化属性信息

虽然这里已经达到我们目的,但是如果采用这种方式的话,相当于原先项目中需要实现数据记录功能属性声明方式全部需要重写,同时,基于 C# 本身已经提供了自动属性方式来简化属性声明,结果现在我们又回到了传统属性声明方式...因此,既然通过一个个属性进行比较方式过于繁琐,这里我们通过反射方式直接对比修改前后两个实体类,批量获取发生数据变更属性信息。...我们最终想要实现是用户可以看到关于某个表单字段属性数据变化过程,而我们定义在 C# 类中属性有时候需要与实际页面上显示字段名称进行映射,以及某些属性其实没有必要记录数据变化情况,这里我通过添加自定义特性方式...(ignore) { DisplayNameValue = displayName; } /// /// 获取特性中属性对应页面上显示名称参数信息...""; if (oldValue.Equals(newValue)) continue; // 获取当前属性在页面上显示名称

3.3K40

Lock VS Monitor

介绍 对开发人员来说,处理关键代码部分多线程应用程序是非常重要。 Monitor和lock是c#语言中多线程应用程序中提供线程安全方法(lock关键字本质就是对Monitor封装)。...两者都提供了一种机制来确保只有一个线程同时执行代码,以避免代码功能被其他线程中断 c#中 Lock关键字确保一个线程同时执行一段代码。...lock关键字通过获取给定对象互斥,将语句块标记为一个临界段,执行语句,然后释放, Monitor Monitor提供了一种同步对象访问机制。...使用Monitor可以确保不允许任何其他线程访问所有者正在执行应用程序代码段,除非其他线程使用不同锁定对象执行代码。...TryEnter(Object, Boolean) 尝试获取指定对象上排他,并自动设置一个值,指示是否获取了该。 TryEnter(Object) 尝试获取指定对象排他

63530

C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋互斥,混合,读写

,也就是切换线程之前自旋没有机会被释放 互斥 由于自旋不适用于长时间运行,它使用场景比较有限,更通用线程是操作系统提供基于原子操作与线程调度实现互斥(Mutex) 与自旋一样,操作系统提供互斥内部有一个数值表示是否已经被获取...,同一个线程每获取一次就加1,释放一次就减1,减1后如果计数器变为0就执行真正释放操作,一般用在嵌套调用多个函数中 Mutex 类另一个特点是支持跨进程使用,创建时通过构造函数第二个参数可以传入名称...如果一个进程获取,那么在释放该另一个进程获取同样名称需要等待;如果进程获取,但是在退出之前没有调用释放方法,那么会被操作系统自动释放,其他当前正在等待被自动释放前进入等待状态...,不需要事先创建指定类型实例,并且涉及非托管资源由 .NET 运行时自动释放,不需要手动调用释放函数 获取和释放混合需要使用 System.Threading.Monitor 类中函数 C# 提供了...,而普通互斥不管是读取还是修改操作都无法同时执行,如果多个线程为了读取操作而获取互斥,那么同一时间只有一个线程可以执行读取操作,在频繁读取场景下会对吞吐量造成影响 读写分为读取和写入,线程可以根据对共享资源操作类型选择获取读写还是写入

1.3K10

C# 线程安全及线程同步技术

c#为同步访问变量提供了一个非常简单方式,即使用c#语言关键字Lock,它可以把一段代码定义为互斥段,互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。...线程A执行到lock语句,判断locker是否已申请了互斥,判断依据是逐个与已存在进行object.ReferenceEquals比较,如果不存在,则申请一个新互斥,这时线程A进入lock里面了...线程B执行到lock语句,检查到locker已经申请了互斥,于是等待;直到线程A执行完毕,释放互斥,线程B才能申请新互斥并执行lock里面的代码。...lock 是一种比较好用简单线程同步方式,它是通过为给定对象获取互斥来实现同步。可以看到这种方式的确没有阻塞主线程,而且成员变量值也是连续递增,说明是线程安全。...【这里锁定实例对象是book】 lock(type)这种锁定用于锁定类型.只要线程调用方法时,没有获取该种类型,则会被阻塞,一般不建议这种。

1.9K10

MYSQL 8 从metadata开始到如何获得语句由于获取失败错误

Metadata意义在于MYSQL 不会随便让数据写入到metadata 中,他要做是维护数据在表中一致性,举例当有表操作在修改 metadata 中数据情况下,未提交事务,或者是回滚事务都需要等待...metadata lock中释放后,才能进行后续工作。...那么接下来问题是,metadata lock会在什么时候在MYSQL 中工作问题, 1 创建或删除索引 2 修改表结构 3 在对表进行optimize table , repair table...那么下面有一个问题,如果对一个表锁定解锁顺序是如何,当我们针对一个表进行了 X加持,后面我们先进行了一个插入操作,然后在进行对表rename操作, 此时真正顺序应该是 1 X 锁定标...,用户prepare状态会被保持直到XA_COMMIT 或者 XA_ROLLBACK 除了这个问题以外,就是关于如何发现曾经MYSQL 发生过错误,一般情况MYSQL 5.X我们都是去找到ERROR

1.9K30

如何在前端下载后端返回文件流时,获取请求头中文件名称

前言在前后端分离开发模式下,前端需要从后端获取文件流,以便进行文件下载。同时,前端还需要获取请求头中文件名称,以便为用户提供更加友好下载体验。...本文将介绍如何在前端下载后端返回文件流时,获取请求头中文件名称。2. 获取文件流前端可以通过发送请求方式获取后端返回文件流。...在前端下载文件时,可以通过获取响应头中 Content-Disposition 实体头字段,进而获取文件名称。...总结本文介绍了如何在前端下载后端返回文件流时,获取请求头中文件名称。...通过获取响应头中 Content-Disposition 实体头字段,再利用正则表达式匹配出 filename 子参数值,即可轻松获取文件名称

5.6K01

Java多线程之synchronized详解

互斥性我们也往往称为操作原子性。...synchronized 实例方法,那么其他线程不能访问该对象其他 synchronized 方法,毕竟一个对象只有一把,当一个线程获取了该对象之后,其他线程无法获取该对象,所以无法访问该对象其他...,但是这两个方法都进行了同步,并且是通过同一个对象去调用,所以调用之前都需要先去竞争同一个对象上(monitor),也就只能互斥获取,因此,method1和method2只能顺序执行。...1,该线程即为monitor所有者。 ​...3.2、Synchronized可重入性 从互斥设计上来说,当一个线程试图操作一个由其他线程持有的对象临界资源时,将会处于阻塞状态,但当一个线程再次请求自己持有对象临界资源时,这种情况属于重入

1.5K10
领券