线程同步

来源:互联网 发布:map添加数据 编辑:程序博客网 时间:2024/06/11 19:58

什么是线程同步

线程同步的真实意思和字面意思恰好相反。
线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。

为什么线程同步

线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。
当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。

怎么线程同步

进程中线程同步的四种常用方式

1. 临界区(CCriticalSection)

多个线程访问一个独占性共享资源时,可以使用临界区对象
拥有临界区的线程可以访问被保护起来的资源或代码段

2、 事件(CEvent)

允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务
防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去

3. “互斥锁”

防止多个线程同时读写某一块内存区域

还有些房间,可以同时容纳n个人,比如厨房

某些内存区域,只能供给固定数目的线程使用

就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。

4. 信号量”

用来保证多个线程不会互相冲突

1)wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
(2)sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的
唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级
(4)notityAll ():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,
而是让它们竞争
https://zhidao.baidu.com/question/327685723.html

原创粉丝点击