SemaphoreAcl.Create(Int32, Int32, String, Boolean, SemaphoreSecurity) 方法

定义

获取或创建 Semaphore 实例,允许在事件创建期间选择性地指定 SemaphoreSecurity 实例来设置该实例。

public:
 static System::Threading::Semaphore ^ Create(int initialCount, int maximumCount, System::String ^ name, [Runtime::InteropServices::Out] bool % createdNew, System::Security::AccessControl::SemaphoreSecurity ^ semaphoreSecurity);
public static System.Threading.Semaphore Create (int initialCount, int maximumCount, string? name, out bool createdNew, System.Security.AccessControl.SemaphoreSecurity? semaphoreSecurity);
static member Create : int * int * string * bool * System.Security.AccessControl.SemaphoreSecurity -> System.Threading.Semaphore
Public Shared Function Create (initialCount As Integer, maximumCount As Integer, name As String, ByRef createdNew As Boolean, semaphoreSecurity As SemaphoreSecurity) As Semaphore

参数

initialCount
Int32

可以同时满足的信号量的初始请求数。

maximumCount
Int32

可以同时满足的信号量的最大请求数。

name
String

如果要与其他进程共享同步对象,则为名称;否则为 null 或空字符串。 该名称区分大小写。 反斜杠字符 (\) 是保留的,只能用于指定命名空间。 有关命名空间的详细信息,请参阅备注部分。 根据操作系统,名称可能会有进一步的限制。 例如,在基于 Unix 的操作系统上,排除命名空间后的名称必须是有效的文件名。

createdNew
Boolean

当此方法返回时,如果创建了本地信号量(即,当 namenullEmpty 时),则此参数始终设置为 true。 如果 name 具有有效的非空值,则在创建系统信号量时,此参数设置为 true;如果找到具有该名称的现有系统信号量,则此参数设置为 false。 此参数未经初始化即被传递。

semaphoreSecurity
SemaphoreSecurity

要应用的可选信号量访问控制安全性。

返回

表示系统信号量(如果已命名)或本地信号量(如果未命名)的对象。

例外

initialCount 为负数。 或

maximumCount 不是正数。

initialCount 大于 maximumCount

仅限 .NET Framework:name 的长度超过 MAX_PATH(260 个字符)。

name 无效。 导致这种情况的原因有很多,包括操作系统可能会施加的一些限制,例如未知前缀或无效字符。 请注意,名称和通用前缀“Global\”和“Local\”区分大小写。

还有一些其他错误。 HResult 属性可能提供更多信息。

仅限 Windows:name 指定了未知命名空间。 有关详细信息,请参阅对象名称

name 太长。 长度限制可能取决于操作系统或配置。

无法创建具有提供的 name 的同步对象。 不同类型的同步对象可能具有相同的名称。

注解

name可以使用 或 Local\ 作为Global\前缀,以指定命名空间。 Global指定命名空间后,可以与系统上的任何进程共享同步对象。 Local指定命名空间时(未指定命名空间时也是默认值),可以与同一会话中的进程共享同步对象。 在 Windows 上,会话是登录会话,服务通常在不同的非交互式会话中运行。 在类似于 Unix 的操作系统上,每个 shell 都有其自己的会话。 会话本地同步对象可能适合用于使用父/子关系(在这些进程都在同一会话中运行)之间进行同步。 有关 Windows 上的同步对象名称的详细信息,请参阅 对象名称

如果提供了 , name 并且命名空间中已存在请求类型的同步对象,则会打开现有的同步对象。 如果命名空间中已存在不同类型的同步对象, WaitHandleCannotBeOpenedException 则会引发 。 否则,将创建新的同步对象。

注意

默认情况下,命名信号量不仅限于创建它的用户。 其他用户可能能够打开和使用信号灯,包括通过多次获取信号灯而不释放信号灯来干扰信号量。 若要限制对特定用户的访问,可以在创建命名信号灯时传入 SemaphoreSecurity 。 避免在没有访问限制的情况下使用命名信号灯,这些信号灯对可能具有不受信任的用户运行代码的系统。

适用于