线程同步之竟态条件
来源:互联网 发布:炒黄金软件 编辑:程序博客网 时间:2024/04/24 15:11
如果两个或多个线程访问相同的对象,或者访问不同步的共享状态,就会出现竟态条件。
在单核的CPU中,若线程调度是抢先式的,就会出现此问题;在多CPU或双核CPU系统中,其多个线程可以同时运行,竟态条件这个问题会比单核CPU系统中较多。
Example:
public class StateObject{
int state=5;
//避免竟态条件的第二种方法是将共享对象设为线程安全的对象。
Object sync= new Object();
public void ChangeState(int loop)
{
lock(sync)
{
if(state==5)
{
state++;
Trace.Assert(state==6,"Race Condition occurred after"+loop+" loops");
}
state=5;
}
}
}
public class SampleThread
{
public void RaceCondtion(object o)
{
StateObject so= o as StateObject;
int i=0;
while(true)
{
lock(so)//锁定共享对象,可以避免竟态条件发生
{
so.ChangeState(i++);
}
}
}
}
public static class MainCllass
{
static void Main()
{
StateObject o = new StateObject();
for(int i=0;i<20;i++)
{
new thread(new SampleThread().RaceCondtion)).start(o);
}
}
}
- 线程同步之竟态条件
- 线程同步 之 条件变量
- 线程同步之条件变量
- 线程同步之条件变量
- 线程同步之条件变量
- 线程同步之条件变量
- 线程同步之条件变量
- 线程间同步 之 条件变量
- Linux线程同步之条件变量
- Linux线程同步之条件变量
- Linux线程同步之条件变量
- Linux线程同步之条件变量
- Linux线程同步之条件变量
- linux 线程同步之条件变量
- 线程同步之条件变量使用手记
- Linux线程同步之条件变量
- Linux线程同步之条件变量
- linux线程同步之条件变量
- oracle常用hint
- 解决lwuit程序在触摸屏中滚动条的方向与定位问题
- 搜索引擎
- iis 5.0认证绕过漏洞
- 状态机编程
- 线程同步之竟态条件
- C++中指针和引用的区别
- winform 设置快捷键 触发事件 F1~F12
- Java数组浅析(转)
- 常用操作管理
- Android关于联系人电话号码的查找
- 服务器安装
- java中synchronized用法
- 简单flash代码实现连连看