我正在c#中编写一些具有函数
的类Print(string s)
在上一个版本中,我发现这个函数从许多线程调用,并且每次调用此函数都应该被锁定。在C语言中,我可以将此功能重命名为
PrintA(string s)
并将头文件更改为
#define Print(a) {Lock(PrintA) //
{ //
PrintA(a) //
} //
}
有可能在C#中写这样的东西吗? 我只是想在整个代码中改变一个地方而不是多个地方。
答案 0 :(得分: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)
添加到方法中。前者更为可取,因为锁定对象是私有的,只有你可以锁定它。
答案 1 :(得分:0)
如果要锁定整个方法,可以使用[MethodImpl(MethodImplOptions.Synchronized)]
属性:
[MethodImpl(MethodImplOptions.Synchronized)]
public void Print(string s)
{
...
}
对于更具体的控制,您必须在代码块上使用lock
。