社区
C#
帖子详情
关于LOCK的问题
chat00544
2009-11-09 03:02:37
看到
lock(obj)
{
response.write("sdf");
}
这个语句的意思是response.write("sdf"),在一个时间内只能同一个程序执行,执行完后下个进程才能再使用.
主要是对obj不明白什么意思的,有的也写lock(typeof (类名)),lock(对象名),lock("名字"),这些参数都是什么意思啊.主要有什么作用,麻烦各位大大解释一下,最好有例子.谢谢!
...全文
94
11
打赏
收藏
关于LOCK的问题
看到 lock(obj) { response.write("sdf"); } 这个语句的意思是response.write("sdf"),在一个时间内只能同一个程序执行,执行完后下个进程才能再使用. 主要是对obj不明白什么意思的,有的也写lock(typeof (类名)),lock(对象名),lock("名字"),这些参数都是什么意思啊.主要有什么作用,麻烦各位大大解释一下,最好有例子.谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Hide1984
2009-11-10
打赏
举报
回复
[Quote=引用 10 楼 chat00544 的回复:]
OK,这个问题解决了,但是怎么锁定一个方法呢?
[/Quote]
lock(obj)
{
//Call your Method;
}
chat00544
2009-11-09
打赏
举报
回复
OK,这个问题解决了,但是怎么锁定一个方法呢?
卧_槽
2009-11-09
打赏
举报
回复
obj只是锁定功能的一个锁定标记。
obj只想某一个内存块。
lock方法检查该内存地址是否已经被记录,如果已经被记录则重新分配cpu时间片。知道该地址使用记录消除。
这样达到了锁定某一功能不被并行执行。
lock(null)
{
}
这样写很有可能会出问题,因为null指向的地址空间在不同的线程中可能会出现差异。那样就达不到lock的效果了。
obj最好是一个静态变量。
static object lockobj=new object();
我一般这么定义。
chat00544
2009-11-09
打赏
举报
回复
如果我只想锁定几行语句是不是可以这样写:
lock(null)
{
语句1;
语句2;
语句3;
}
另外是否能够锁定一个方法,当访问到某一类中的一个Test()方法时,只能有一个进程执行,执行完后另一个进程才能再执行.
chat00544
2009-11-09
打赏
举报
回复
哦,这样就有点明白了,lock(obj){语句}的意思是锁定obj的同时也锁定下面的{语句},只有当obj和语句都执行完了后,下个进程才能执行对吗?
noah1982
2009-11-09
打赏
举报
回复
class Temp
{
private void Test()
{
int test=1;
lock(this)
{
response.write("sdf");
}
}
...........
...........
}
lock(this)--锁定当前类实例
{}
其他线程如果要操作类实例,就被阻塞
object obj = new object();
lock(obj)--锁定obj
{}
其他线程如果要操作obj,就被阻塞
一般不建议lock(typeof (类名)),lock(this),lock("名字"),
lock(typeof (类名))--将锁定类
lock(this)--将锁定当前类实例
lock("名字")--将锁定叫这个名字的声明
而采用
object obj = new object();
lock(obj)--锁定obj
{}
这样锁定的影响只会发生在obj上,而obj是我们专门用来锁定的
wfyloo1981
2009-11-09
打赏
举报
回复
为什么要锁住整个对象啊???
wfyloo1981
2009-11-09
打赏
举报
回复
是执行到lock(this)是对当前对象(this)加锁
response.write("sdf")是加锁之后的操作
不过你这个代码,我不大理解。
你lock是在private方法里,而且是锁住的整个对象,感觉好像没什么意义,
还是等高手解答吧
chat00544
2009-11-09
打赏
举报
回复
有没有大侠来解释一下,小弟不胜感激.
chat00544
2009-11-09
打赏
举报
回复
大概知道什么意思了,不过还不是很明确,比如当前对象:
class Temp
{
private void Test()
{
int test=1;
lock(this)
{
response.write("sdf");
}
}
...........
...........
}
那么其中的线程是执行到response.write("sdf"); 时加锁呢?还是在执行到temp对象是加锁呢?
Hide1984
2009-11-09
打赏
举报
回复
lock一个obj就是将这个obj的synchroot置1, 你可以想象SynchRoot是一个flag,1/0,当obj未被锁定的时候,synchRoot为0,这个时候别的线程进来,首先要check SynchRoot,发现为0,没有被锁定,于是
1。 加锁 Lock (SynchRoot = 1)
2. 执行Lock 内部代码
3. 释放SynchRoot (SynchRoot = 0)
就像Try/Finally一样,
Try中加锁,执行你需要的代码,Finally中释放锁。
楼主可以看看IL,
会被编译成Mointor.Enter/Mointor.Exit.
Java并发编程实战
课程介绍: 对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。那到底应该怎么学习并发编程呢?Java SDK的并发工具包有很多,是要死记硬背每一个工具的优缺点和使用场景吗?当然不是,想要学好并发编程,你需要从一个个单一的知识和技术中“跳出来”,高屋建瓴地看
问题
,并逐步建立自己的知识体系。本课程希望能够帮助你建立起一张处理并发
问题
的全景图,让你能够彻底理解并发
问题
的本质所在。同时,课程还会深入介绍Java并发编程技术背后的逻辑关系以及应用场景,助你能够游刃有余地游走在这些技术之中。课程核心知识点: 1. 线程安全性分析,主要内容包括原子性、可见性、有序性等分析。以及Atomic包; CAS算法、Synchronized、
Lock
、Happens-before等。 2. 线程的安全性手段,ThreadLocal、同步容器、并发容器、J.U.C包等3. AQS以及其他J.U.C组件,如CountDownLatch、Semaphore、CycliBarrier、Reentrant
Lock
4. 线程池的原理5. ConcurrentHashMap等 课程大纲:
STM32 HAL_
LOCK
问题
STM32 HAL_
LOCK
问题
STM32 HAL_
LOCK
问题
在使用STM32的HAL库开发时候,在使用UART和CAN的使用,偶尔会碰到突然不再接收数据的情况.调试发现,信号有的,但是就是软件不再进入接收中断了. 通过调试,最后定位到
问题
点在于__HAL_
LOCK
()这个函数里. 以下用uart为例子,剖析这个
问题
. 典型的uart接收数据例子 uart配置后,最后调用一下 HAL_UAR...
关于万向锁(Gimbal
lock
)
问题
的理解及解决
1. Gimbal
lock
的理解 万向锁(Gimbal
lock
): 一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。 对于万向锁的
问题
,只有在动态欧拉角中出现,而静态欧拉角不存在万向锁的
问题
!!! 静态: 即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态,此时各个变换顺序的旋转矩阵是左乘的 动态: 即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态,此时各个
Could not get
lock
/var/lib/dpkg/
lock
问题
解决方法
今天在ubuntu上安装sqlite 时,执行命令sudo apt-get -y install sqlite3 时,系统提示:Could not get
lock
/var/lib/dpkg/
lock
- open (11: Resource temporarily unavailable) 上述提示的意思是,无法获取/var/lib/dpkg/
lock
锁,解决的办法很简单,把当前的锁干掉就可以了,执行 sudo rm -rf /var/lib/dpkg/
lock
,执行完就没
问题
了。 ...
C#关于
Lock
(object)使用笔记
个人笔记以及吐槽 在写多线程代码时,经常遇见并发
问题
. 如何有效的控制单一线程进入操作,后续等待是个
问题
. 鄙人小白一枚.同时也是懒癌晚期.随使用了
Lock
来锁定. 个人总结
lock
可以分为 2个形态 1.公共列队 2.独立对象内部列队 公共列队 所谓公共列队,就是无论多少个线程进入该代码段访问时,全部都要乖乖排队. 公共列队的实现是通过 静态字段 static 实现的.例如 private static object 列队锁 = new object(); public void X() {
lock
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章