进程与线程

进程(process):管理单元,管理分配应用程序的数据,代码的内存空间.

线程(thread):执行单元,线程负责执行一个预先编排好的代码段,执行代码,栈是基于线程的.

一个应用程序启动的时候,进程自动创建,并且会默认创建主线程,主线程负责执行Main()方法.

thread t =new thread(new ThreadStart(f));
f方法变量是放在t线程空间的栈中的.
thread t1=new thread(new ThreadStart(f));
f方法变量是放在t1线程空间的栈中的.
可以有无数个线程执行同一个方法.方法中的变量(局部变量)分别放在不同的线程空间当中,互不影响.
public void f()
{
int a=0;
int b=a++;
int c;
}
如session,它是基于会话的,不是全局的.所以session中的数据当前会话能看到.
浏览器向服务器发送第一个请求,随后要和服务器一系列的连续交互,这段期间是一个会话.


多个线程控制一个全局变量时候,需要用Lock
全局的变量是进程数据.
int sum=0;
public void f()
{
sum=sum+2
}

f的执行过程:[读取sum]->[sum+2]->[sum复制到全局]
如果2个子线程都在执行f方法.
t1线程执行的时候时间片到了,但t1并没有执行完f方法的整个过程,也就是说sum还等于0,这时候t2介入,t2读取sum为0,因为t1并没有更新sum,这样执行下去,,两个线程最后肯定有一个值被覆盖,sum的最终值为2.并不为4.
所以在多线程控制全局变量的情况下,在处理这些全局变量的时候,为了防止并发操作,需要用锁(Lock)来解决.也就是说,先让一个线程执行完毕之后,在让第二个线程介入.
加锁的目的是保证涉及到的全局变量的代码不会被多个线程并行的去执行.
Lock(o) //o为锁对象(实例或typeof(类名))
{
//临界区域(critical section)
sum=sum+2;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值