线程同步
来源:互联网 发布:淘宝婴童装主营怎么写 编辑:程序博客网 时间:2024/05/16 19:39
多个线程同时访问1个数据时,如果只有读操作没有写操作可以不同步,如果写和读同时交互,就需要加锁,对数据进行同步,如STL容器是线程安全的,可以不考虑,除了少部分情况下还是有问题的。
1.使用特殊域变量(volatile)实现线程同步
a.volatile关键字为域变量的访问提供了一种免锁机制,
b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,
c.因此每次使用该域就要重新计算,而不是使用寄存器中的值
d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
2.同步锁代码块
临界区等,保护代码块的完整执行
3.信号开关同步(lock、unlock)
a.平行线程
同步,一先一后的执行代码wait+reset-->signal
死锁,各自等待
b.主从(父子)关系线程
父子线程,在多连接的服务器上,很普遍,同步机制也比较复杂,和一般的线程同步不同,父子线程中,由于要求高的连接数,需要父线程尽量少的阻塞。如下图,一个线程中生成另外两个线程,其中的写或读的关键点已标出,需要volatile变量标记,使主线程在整个循环中,只有变量标记为阻塞时阻塞。
结论:
基于代码块的读写加锁,是线程同步中最方便、和通用的做法
0 0
- 线程同步--线程同步--线程同步--线程同步--线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- mysql自增长id归零
- 数组的基本操作(三)
- Win7笔记本无线连接wlan autoconfig服务无法启动的解决方法
- 解决linux下sublime text3无法输入中文的情况
- linux下parted创建gpt分区
- 线程同步
- 异步式I/O与事件驱动--起步
- 欢迎使用CSDN-markdown编辑器
- 正则表达式的威力2_替换replaceAll()
- 当子线程执行完,提交到主线程执行代码(UIUtils)
- 代数-不等式
- 《第一行代码Android》学习日记17
- linux用gedit保存文件失败的解决办法
- 指针的基本问题