gpt4 book ai didi

c# - Mutex 对象是否通过引用传递?

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:23 24 4
gpt4 key购买 nike

我正在从一个类中构造多个对象,并使用这些类中的特定函数来启动线程。现在,包含构造这些对象的成员函数的类具有静态私有(private) Mutex 成员。我将这个静态成员传递给构造函数,在每个构造函数内部,传递的 Mutex(大概是通过引用)被分配给另一个本地成员。

如果我然后使用这些本地 Mutex 成员中的每一个来确保线程安全,我是否能够实现这一点?我指望的事实是,无论存在多少个包含 Thread 函数的对象的不同实例,因为它们都引用同一个 Mutex 对象,如果使用得当,线程安全是可以保证的。

请在下面找到代表该想法的代码片段:

Class ThreadClass
{
private Mutex myCopyOfMutex;
public ThreadClass(Mutex _globalMutex)
{
myCopyOfMutex = _globalMutex;
}
public ThreadFunction()
{

// Wait until it is safe to enter.
myCopyOfMutex.WaitOne();
// critical code

// Release the Mutex.
myCopyOfMutex.ReleaseMutex();

}
}

Class MotherClass
{
private static Mutex mut = new Mutex();

ThreadClass one = new ThreadClass(mut); // first instance
Threadclass two = new ThreadClass(mut); // second instance

// Assign the Thread function to run on separate Thread

}

最佳答案

是的,它会起作用。不,它不是通过引用传递的。

传递a引用和传递之间有一个重要的区别引用

当您将引用类型传递给方法时,它通常作为引用传递:

SomeMethod(mutex);

通过引用传递参数,您可以使用ref关键字:

SomeMethod(ref mutex);

方法签名中的参数也必须使用 ref 关键字声明:

public void SomeMethod(ref Mutex mutex) {

通过引用传递变量 意味着您传递对变量的引用,而不是变量中包含的引用的副本。然后该方法可以更改变量本身,而不仅仅是引用指向的对象。

在大多数情况下,在这种情况下,您应该以常规方式传递参数。 通过引用 仅在您出于特定原因需要时才进行。

关于c# - Mutex 对象是否通过引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com