第一次作业(加锁)

1.加锁的定义:就是线程同步,避免多个线程 同时访问全局变量导致数据被破坏,某个线程加了锁之后,操作完再把锁释放,期间要是有其他线程想去访问被加锁的变量就需要先拿到锁,而锁没有释放的话,就只有等待,直到拥有锁的线程把锁释放,就表示可以操作它了。
spinlock(自旋锁)
Mutex(互斥量)
semaphore(信号量)
critical section(临界区)
spinlock(自旋锁)自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,不需要自旋锁
Mutex(互斥量)是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行
Semaphore(信号量)是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。
Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的
信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码
critical section(临界区)保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。
4.代码中如何体现加锁如何实现加锁
在java中 实现对线程的控制有Thread类中的start () sleep() interrupt() yield()等方法。为了解决多线程并发操作是可能对共享资源引起的数据混乱,在java中引入对象互锁机制,java中的关键字synchronized用老与对象的互锁联系。当某个对象用synchronzied修饰时。表明该对象在任何一个时刻只能由一个线程访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值