社区
Linux/Unix社区
帖子详情
多线程锁的问题
weirancg
2017-07-10 02:54:55
场景:线程1、线程2、布尔变量b。线程1和线程2都会读写布尔变量b,然后通过判断其真假,进行一些操作。
在线程1和线程2中,给b赋值,不是0,就是1:
b = 0;
……
b = 1;
对b进行判断也采用这种形式:
if(b == 0)
{
//dosomething
}
……
if(b == 1)
{
//dosomething
}
这样用是否可以不用加锁?
...全文
330
9
打赏
收藏
多线程锁的问题
场景:线程1、线程2、布尔变量b。线程1和线程2都会读写布尔变量b,然后通过判断其真假,进行一些操作。 在线程1和线程2中,给b赋值,不是0,就是1: b = 0; …… b = 1; 对b进行判断也采用这种形式: if(b == 0) { //dosomething } …… if(b == 1) { //dosomething } 这样用是否可以不用加锁?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
老马何以识途
2017-07-14
打赏
举报
回复
双线程的简单场景应该可以不加锁,看描述你也不需要两个线程互斥运行。
weirancg
2017-07-11
打赏
举报
回复
谢谢各位回复 @zhxianbin 实际编程时,我会用宏代替==,不会出现=和==混淆的问题。 对的,是有切换过程。 正常情况下,多线程是要用锁来保护全局变量的,但是我所描述的场景,只会对布尔变量b为-或者1进行处理,如果b为其他值,是会忽略的。我所疑惑的是:线程1正在改变b的值(给b赋0或1),线程2正好读写b(写的话,也是赋0或1),会不会使b有其他值出现,即不是0和1?如果没有其他值的出现,则整个逻辑应该没有影响,如果有,则这种情况程序不作处理,相当于丢失了某种状态。
zhxianbin
2017-07-11
打赏
举报
回复
http://www.cnblogs.com/life2refuel/p/5024289.html
zhxianbin
2017-07-11
打赏
举报
回复
c 里面的 bool 就是 int 吧 另外,楼主的代码是不是要 这样: if(0 == b) { //dosomething b = 1; } 有这样一个切换过程吧?
zhxianbin
2017-07-11
打赏
举报
回复
是不是要 if(0 == b) { //dosomething b = 1; } 这整个过程中 b 都不被改变
LubinLew
2017-07-10
打赏
举报
回复
引用 3 楼 zhxianbin 的回复:
volatile 也要加锁,volatile 避免 cache 和 内存不一致,但不能解决访问冲突吧
一个布尔变量的赋值过程是原子性的 所以可以不用加锁
zhxianbin
2017-07-10
打赏
举报
回复
volatile 也要加锁,volatile 避免 cache 和 内存不一致,但不能解决访问冲突吧
ipqtjmqj
2017-07-10
打赏
举报
回复
声明成volatile就不用加锁了
zhxianbin
2017-07-10
打赏
举报
回复
不行,还是要加锁的
Java多线程安全
问题
和锁
多线程安全
问题
和锁 文章目录多线程安全
问题
和锁线程在jvm中的特点锁的出现synchronized 关键字-监视器锁monitor lock死锁的产生和避免 什么是线程安全
问题
? 当多个线程同时操作同一个数据是,可能会出现数据不一样的情况,这就是线程安全
问题
。 线程安全机制用于保证多个线程访问数据时的一致性. 线程安全
问题
体现在三个方面: 1、原子性 2、可见性 3、有序性 原子操作是不可分割的,...
Java多线程(四)
线程锁
Java多线程(四)
线程锁
超卖
问题
解决方案(一种多线程安全
问题
) 乐观锁、悲观锁
超卖
问题
,即卖出的数量超过了给定的数量,一般是由多线程引起的。假设此时商品A库存为1件,当多个用户同时进行购买时,同时读到了当前的库存为1,于是都被允许下单,扣减库存,从而使库存为负数,导致超卖。超卖
问题
是典型的多线程安全
问题
,针对这一
问题
的常见解决方案就是加锁:认为线程安全
问题
一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。例如Synchronized、Lock都属于悲观锁。认为线程安全
问题
不一定会发生,因此不加锁,只是在更新数据时去判断有没有其它线程对数据做了修改。 如果没有修改则认为是安全的
【多线程】锁机制详解
一、锁概述 1.1 概述 在多线程环境下,为了让多线程安全地访问和使用共享变量,必须引入锁机制。锁机制即当一个线程持有锁后,其他线程只能进行等待,直到持有锁的线程释放锁,再次重新竞争锁。 1.2 三种锁的大类型 锁大致可以分为互斥锁、共享锁、读写锁 1.2.1 互斥锁(排它锁) 互斥锁,即只有一个线程能够访问被互斥锁保护的资源 在访问共享对象之前,对其进行加锁操作。在访问完成之后进行解锁操作。加锁后,其他试图加锁的线程会被阻塞,知道当前线程解锁。解锁后,原本等待状态的线程变为就绪状态,重.
面试必问!多线程并发
问题
多线程并发
问题
,基本是面试必问的。 大部分同学应该都知道Synchronized,Lock,部分同学能说到volatile、并发包,优秀的同学则能在前面的基础上,说出Synchronized、volatile的原理,以及并发包中常用的数据结构,例如ConcurrentHashMap的原理。 这篇文章将总结多线程并发的各种处理方式,希望对大家有所帮助。 一、多线程为什么会有并发
问题
为什么多线程同时访问(读写)同个变量,会有并发
问题
? Java 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章