线程同步

lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放改锁。
lock关键字在块的开始处调用Enter,而在块的结尾处调用Exit。
通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。 常见的结构 lock (this)、lock (typeof (MyType)) 和 lock (“myLock”) 违反此准则:
1、如果实例可以被公共访问,将出现lock(this)问题
2、如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。
3、由于进程中使用同一字符串的任何其他代码都将共享同一个锁,所以出现 lock(“myLock”) 问题。
最佳的做法是定义private static 对象变量来保护所有实例所共有的数据。

问题

多个线程同时访问同一资源时,必然会出现冲突问题?比如一个线程尝试从一个文件中读取数据,而另一个线程则尝试在同一个文件中修改数据。这样子,数据可能变得不一致

解决方法

通常只让一个线程彻底访问完成其任务后,再运行下一个线程
三种方法实现线程同步 Lock、Monitor、Mutex等

代码

//FileLogger.cs
static readonly object WriteLock = new object( );
public void Log(string strText)
{
	if(m_strFile == "") return;
	lock(WriteLock)
	{
		WriteLone(strText);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值