0

我正在用 c# 编写一些具有函数的类

Print(string s)

在上一个版本中,我发现这个函数是从多个线程调用的,并且每次调用这个函数时都应该锁定它。在 C 语言中,我可以将此函数重命名为

PrintA(string s) 

并将头文件更改为类似

#define Print(a) {Lock(PrintA) //
                  { //
                      PrintA(a) //
                  } //
                 } 

是否可以在 C# 中编写类似的内容?我只想在整个代码中更改一个地方而不是多个地方。

4

2 回答 2

1

C# 中没有宏。要将同步添加到方法中,您可以使用:

void Print(string s)
{
    lock (lockObject) { PrintA(s); }
}

您需要定义一个锁定对象,只需将一个字段添加到您的类

private readonly object lockObject = new object();

或者你可以使用

[MethodImpl(MethodImplOptions.Synchronized)]
void Print(string s) { ... }

这相当于添加lock(this)到方法中。前者更可取,因为锁定对象是私有的,只有您可以锁定它。

于 2012-04-22T08:45:34.670 回答
0

如果你想锁定整个一个方法,你可以用[MethodImpl(MethodImplOptions.Synchronized)]属性装饰它:

[MethodImpl(MethodImplOptions.Synchronized)]
public void Print(string s)
{
    ...
}

对于更具体的控制,您必须lock在代码块上使用。

于 2012-04-22T08:44:52.143 回答